/ / Usługa w ramach zadania? Lub zadanie w ramach usługi - Android, struktura

Usługa wewnątrz zadania? Lub zadanie wewnątrz usługi - Android, struktura

Tworzę aplikację na Androida z większą liczbą osób w moim zespole, aplikacja ma usługi do nawiązywania połączeń ze zdalnymi aplikacjami API i musisz wykonywać te połączenia osobnym wątkiem za pomocą Asynctask.

Teraz muszę zrobić nową usługę i patrzećdzięki poprzednim wykonanym przez moich partnerów widzę, że jeden z nich utworzył usługę, a wewnątrz usługi utworzył AsyncTask, podczas gdy drugi partner wystąpił w usłudze wewnątrz AsyncTask.

Zastanawiałem się więc, jaka jest najlepsza praktyka w tym zakresie? Czy oba sposoby są poprawne i istnieje konkretny powód każdego z nich?

Odpowiedzi:

3 dla odpowiedzi № 1

Usługa wewnątrz AsyncTask wydaje się naprawdę dziwna!

Najczęściej stosuje się AsyncTasks we wzorcu usługi lub modułu obsługi wątków, aby upewnić się, że masz wątek „tła” dla połączeń komunikacyjnych.

Ale jeśli zadaniem twojej usługi jest po prostuwykonać połączenie ze zdalnym interfejsem API, a następnie zwrócić wyniki do programu wywołującego, zdecydowanie sugeruję przyjrzenie się usłudze IntentService. Różnica polega na tym, że usługa IntentService nie potrzebuje żadnej funkcji AsyncTask, aby osiągnąć to „tło” (inny wątek).

Sprawdź dokument Google: http://developer.android.com/reference/android/app/IntentService.html


1 dla odpowiedzi nr 2
  1. zakładając, że mówisz o usłudze, która jest jednym z czterech komponentów Androida. Usługa może zostać uruchomiona tylko przez system Android. nie możesz tego zrobić w AsyncTask. jeśli wystąpisz usługę przez Java new słowo kluczowe, instancja działa po prostu jak normalna klasa Java, poza kontrolą systemu Android.
  2. możesz uruchomić AsyncTask w usłudze, jest to wspólny projekt.