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?

Author: Vadim Kotov, 2010-07-16

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.

 178
Author: Pentium10,
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ń

 20
Author: Manuel Alejandro Diaz Serret,
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.

 14
Author: Peter Jankuliak,
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.

 7
Author: Abbath,
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.

 3
Author: Rahul Raina,
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.

 1
Author: pankaj,
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