Dostałem nieco mylić o różnicach między Handlers
, AsyncTask
a Threads
w Androidzie. Przeczytałem sporo blogów i pytań tutaj w StackOverflow.
Handler
to wątki w tle, które zapewniają komunikację z interfejsem użytkownika. Na przykład aktualizacja paska postępu powinna odbywać się za pośrednictwem Handler
. Korzystanie z programów obsługi ma tę zaletę MessagingQueues
, że jeśli chcesz planować wiadomości lub aktualizować wiele elementów interfejsu użytkownika lub wykonywać powtarzające się zadania.
AsyncTask
są podobne, w rzeczywistości korzystają z nich Handler
, ale nie działają w wątku interfejsu użytkownika, więc dobrze nadaje się do pobierania danych, na przykład usług sieciowych. Później możesz wchodzić w interakcje z interfejsem użytkownika.
Thread
nie może jednak wchodzić w interakcje z interfejsem użytkownika, zapewnia bardziej „podstawowe” wątki, a brakuje wszystkich abstrakcji AsyncTask
.
Chciałbym jednak mieć uruchomione połączenie z gniazdem. Czy należy to uruchomić w module obsługi, wątku, czy nawet w AsyncTask
? Interakcja interfejsu użytkownika w ogóle nie jest konieczna. Czy ma to wpływ na wydajność, której używam?
Tymczasem dokumentacja została znacznie ulepszona.
Handler
nie jest wątkiem i niczego nie wykonuje. To tylko sposób na bezpieczne przekazywanie wiadomości z jednego wątku do kolejki komunikatów innego wątku . Tak więc normalnie (przynajmniej) muszą zostać utworzone dwa wątki, które mogą następnie używać modułu obsługi, ale moduł obsługi nie może samodzielnie wykonać niczego.