Jaka jest różnica między usługą, asynchronicznym zadaniem i wątkiem. Jeśli się nie mylę, wszystkie są używane do robienia pewnych rzeczy w tle. Jak więc zdecydować, którego użyć i kiedy?
Jaka jest różnica między usługą, asynchronicznym zadaniem i wątkiem. Jeśli się nie mylę, wszystkie są używane do robienia pewnych rzeczy w tle. Jak więc zdecydować, którego użyć i kiedy?
Odpowiedzi:
Prawdopodobnie już przeczytałeś opis ich dokumentacji, nie będę ich powtarzał, zamiast tego spróbuję udzielić odpowiedzi własnymi słowami, mam nadzieję, że ci pomogą.
Usługa przypomina działanie, ale nie ma interfejsu użytkownika. Prawdopodobnie jeśli chcesz pobrać na przykład pogodę, nie utworzysz dla niej pustego działania, do tego użyjesz Usługi.
Wątek to wątek, prawdopodobnie znasz go już z innej części. Musisz wiedzieć, że nie możesz zaktualizować interfejsu użytkownika z wątku. Musisz do tego użyć Handlera, ale czytaj dalej.
AsyncTask to inteligentny wątek, którego należy używać. Inteligentny, ponieważ może pomóc w swoich metodach, a istnieją trzy metody, które działają w wątku UI, co jest dobre do aktualizowania składników UI.
Często korzystam z usług, AsyncTasks. Mniej wątków lub wcale, ponieważ mogę zrobić prawie wszystko za pomocą AsyncTask.
To najłatwiejsza odpowiedź na Twoje pytanie
Wątek
jest jednostką wykonywania, która działa „równolegle” do głównego wątku, jest to ważny punkt, nie możesz zaktualizować składnika interfejsu użytkownika z żadnego wątku tutaj oprócz głównego wątku.
AsyncTask
to specjalny wątek, który zapewnia pomocnicze metody aktualizacji interfejsu użytkownika, więc w zasadzie można zaktualizować interfejs użytkownika, nawet gdy AsyncTask będzie działał w wątku w tle. Obsługa komunikacji międzyprocesowej nie jest wymagana jawnie.
Usługa
rozwiązać powyższy problem, ponieważ jest on oddzielony od działania, które go wywołuje, więc może kontynuować działanie nawet po zniszczeniu działania, działa w głównym wątku (uwaga na ANR) użyj usługi w tle (rozszerz IntentService, aby automatycznie utworzyć wątek roboczy dla Ciebie) . Usługa jest jak działanie bez interfejsu użytkownika , jest dobra do długich zadań
Kilka dodatkowych informacji, które chciałbym, aby ktoś mi powiedział kilka dni temu:
Mój przypadek użycia jest taki: mam jeden wątek w globalnej przestrzeni, który jest połączony z serwerem i działanie, które pokazuje wyniki. Gdy użytkownik naciśnie przycisk strony głównej, działanie przechodzi w tło i rozpoczyna się nowa usługa. Ta usługa odczytuje następnie wyniki z wątku i w razie potrzeby wyświetla informacje w obszarze powiadomień. Nie martwię się, że system operacyjny zniszczy moją aktywność, ponieważ wiem, że dopóki Usługa jest uruchomiona, nie spowoduje zniszczenia wątku.
Z perspektywy dewelopera:
Wątek : Używany do wykonywania zestawu kodów równolegle do głównego wątku. Ale nie możesz obsłużyć interfejsu użytkownika w wątku. W tym celu musisz użyćHandler
. Hadler działa jak wątek, ale może również obsługiwać interfejs użytkownika.
ASyncTask : Służy do obsługi tych zadań, których nie można wykonać w głównym wątku. Na przykład żądanie HTTP jest bardzo ciężką pracą, której nie można przenieść na główny wątek, więc możesz obsłużyć żądanie HTTP wASyncTask
Działa równolegle z głównym wątkiem asynchronicznie w kilka metod wywołania zwrotnego, które są wywoływane na ich odpowiednich wydarzenia.
Usługa : jest procesem w tle. Jest stosowany, gdy musisz wykonać pewne przetwarzanie, które nie ma powiązanego z nim żadnego interfejsu użytkownika.
Service
nie będzie konieczne uruchamianie w tle, chyba że używasz IntentService
. Jeśli uruchomiłeś standart Service
z UiThread, będzie on działał na UiThread.
Service
domyślnie nie będzie działać w innym procesie, ale w procesie aplikacji z innymi składnikami. Lepiej powiedzieć, że Service
będzie działać w tle wątku, w którym żyje.