5

Chcę wiedzieć, które z nich lepiej jest pobrać pliki, asynchroniczne zadanie lub usługę?Asynchroniczne zadanie a usługa pobierania danych

Moja aplikacja ma osiem przycisków, z których jeden uruchamia jedno bezpośrednie pobranie (które pobieranie ma ~ 10 MB). Kiedy użytkownik kliknie jeden lub więcej przycisków, aby pobrać dane, lepiej jest użyć asynchronicznego zadania lub usługi?

Dzięki!

Odpowiedz

5

W każdym przypadku powinieneś użyć AsyncTask, ponieważ nawet usługa działa w głównym wątku (GUI), w którym nie powinno się tworzyć sieci. To, czy uruchomić usługę AsyncTask w usłudze, czy w działaniu, zależy od tego, czy pobieranie ma być kontynuowane w tle.

+0

Thanks @StenSoft, więc jeśli aplikacje idzie do tła lub użytkownik zmienia się na inną aktywność, asynchroniczne zadanie zatrzymuje się? – Caaarlos

+1

Nie, ale bez usługi, cała aplikacja może zostać zabita przez system w dowolnym momencie w tle. – StenSoft

+0

hmm wiem Rozumiem, co muszę użyć w tym momencie! Więc użyję AsyncTask. Rozwiązałeś mój boubt, dzięki StenSoft !! – Caaarlos

1

AsyncTask - AsyncTask manipulować wątki i/lub ładowarki, jeśli można to zrobić lepiej z Looper i rzeczy co się męczyć? AsyncTask ma być klasą pomocniczą wokół wątku i obsługi, a najlepiej powinien być używany do krótkich operacji (najwyżej kilka sekund). .. jak można powiedzieć w trybie produkcyjnym, czy nie zajmie to dużo czasu? prawdopodobnie zła sieć, powolna sieć, zakleszczona sieć, ponowne uruchomienie telefonu - i wszystko to prawdopodobnie spowoduje, że pobieranie zostanie uszkodzone lub niedokończone. Jestem użytkownikiem aplikacji, a ja się wkurzam, kiedy marnuję pakiet na nic ..

jeśli chodzi o mnie, użyj

usługi - Service składa uruchomić niezależnie od tego, co jest widoczne app/ekran i zrobić jeśli komunikują się z UI, jeśli tylko jest ona dostępna, jeśli nie kontynuować pobrać i zapisać go, AsyncTask nie stanowi ogólnego schematu wątków. zawsze używaj nici, fajnie, wszyscy to kochamy.

1

wszystkie powyższe odpowiedzi mają dobre punkty. ale kwestia cyklu życia jest najważniejszą rzeczą, którą należy wziąć pod uwagę. na przykład powiedzmy, że używasz asyncTask. więc użytkownik rozpoczyna pobieranie i nagle obraca ekran, a ponieważ wiążesz cykl życia asyncTask z activity, rozpocznie się kolejna operacja asyncTask i spowoduje kompulsywne pobieranie 10 MB. biorąc pod uwagę to, powinieneś używać razem: service i asyncTask, aby rozwiązać problem dotyczący cyklu życia i wątku interfejsu użytkownika.

aktualizacja: Intent-service jest lepszym rozwiązaniem, ponieważ odbiera żądania we własnym wątku i przechodzi do trybu offline, gdy nie ma nic wspólnego