Różnica między usługą, zadaniem asynchronicznym i wątkiem?
Jaka jest różnica między usługą, zadaniem asynchronicznym 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?
6 answers
Prawdopodobnie już czytałeś opis dokumentacji o nich, nie będę ich powtarzał, zamiast tego postaram się udzielić odpowiedzi własnymi słowami, mam nadzieję, że ci pomogą.
Usługa jest jak działanie, ale nie ma interfejsu. Prawdopodobnie jeśli chcesz na przykład pobrać pogodę, nie utworzysz dla niej pustej aktywności, do tego użyjesz usługi.
Wątek to wątek, pewnie znasz go już z innej części. Musisz wiedzieć, że nie możesz zaktualizuj interfejs użytkownika z wątku. Musisz użyć do tego obsługi, ale czytaj dalej.
AsyncTask to inteligentny wątek, który zaleca się używać. Inteligentny, ponieważ może pomóc w jego metodach, a istnieją trzy metody, które działają na wątku UI, co jest dobre do aktualizacji komponentów UI.
Często korzystam z usług, asynchronicznych. Wątek mniej, lub wcale, jak Mogę zrobić prawie wszystko z AsyncTask.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-16 12:30:09
To najprostsza odpowiedź na twoje pytanie
Wątek
Jest jednostką wykonania, która działa "równolegle" do głównego wątku jest ważnym punktem, nie można zaktualizować komponentu UI z głównego wątku tutaj.
AsyncTask
Jest to krótkie zadanie, ponieważ jest powiązane z aktywnością Hosta na przykład, jeśli utworzysz AsyncTask, który będzie pobierał dane z serwera (nie rób tego), gdy obrócisz telefon, a aktywność jest ponownie odtworzony AsyncTask zostanie odtworzony.
Serwis
Rozwiąż powyższy problem, ponieważ żyje on oddzielnie od aktywności, która go wywołuje, więc może kontynuować działanie nawet po zniszczeniu aktywności, działa w głównym wątku (uważaj na ANR) Użyj usługi w tle (extend IntentService tworzy wątek roboczy automatycznie dla Ciebie). usługa jest jak działanie bez UI , jest dobry do długich zadań
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-07 10:53:41
Jeszcze kilka informacji szkoda, że ktoś mi nie powiedział kilka dni temu:
- możesz współdzielić zmienne globalne - takie jak wątki - między działaniami i usługami.
- Twoja Aplikacja wraz ze wszystkimi jej zmiennymi globalnymi nie zostanie wymazana, dopóki istnieje aktywność lub usługa.
- Jeśli masz instancję usługi w aplikacji i system operacyjny potrzebuje zasobów, najpierw zabija Twoje działania, ale tak długo, jak istnieje usługa, system operacyjny nie będzie Wymaż aplikację wraz z jej zmiennymi globalnymi.
Mój przypadek użycia wygląda tak: mam jeden wątek w przestrzeni globalnej, który jest podłączony do serwera i aktywność, która pokazuje wyniki. Po naciśnięciu przycisku Strona główna aktywność przechodzi w tło i uruchamiana jest nowa usługa. Ta usługa odczytuje wyniki z wątku i wyświetla informacje w obszarze powiadomień w razie potrzeby. Nie martwię się o to, że OS zniszczy moją działalność, bo wiem, że tak długo, jak serwis działa to won ' d niszczy wątek.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-01 12:35:23
W skrócie, serwis dla time consuming tasks
, AsyncTask dla short-lived tasks
, Thread jest {[2] } dla wątków.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-29 16:42:54
z perspektywy dewelopera:
Thread : używany do wykonywania zestawu kodów równolegle do głównego wątku. Ale nie możesz poradzić sobie z interfejsem wewnątrz wątku. W tym celu należy 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 obsługiwać w głównym wątku, więc zajmujesz się Żądanie HTTP w ASyncTask
działa równolegle z głównym wątkiem asynchronicznie w background.It ma kilka metod oddzwaniania, które są wywoływane na odpowiednich zdarzeniach.
Usługa : jest procesem w tle. Jest on stosowany, gdy musisz wykonać pewne przetwarzanie, które nie ma żadnego interfejsu użytkownika związanego z nim.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-05-15 10:44:53
Usługa jest jak działanie długo czasochłonne zadanie, ale zadanie asynchroniczne pozwala nam wykonywać długie / background operacje i pokazać swój wynik w wątku UI bez konieczności manipulowania wątkami.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-07-13 05:08:13