Dodanie punktów do zaakceptowanej odpowiedzi:
Zobacz użycie IntentService w interfejsie API Androida. na przykład:
public class SimpleWakefulService extends IntentService {
public SimpleWakefulService() {
super("SimpleWakefulService");
}
@Override
protected void onHandleIntent(Intent intent) { ...}
Aby utworzyć komponent IntentService dla swojej aplikacji, zdefiniuj klasę rozszerzającą IntentService, aw jej ramach zdefiniuj metodę, która zastąpi metodę OnHandleIntent ().
Zobacz także kod źródłowy IntentService, jego konstruktor i metody cyklu życia, takie jak onStartCommand ...
@Override
public int More ...onStartCommand(Intent intent, int flags, int startId) {
onStart(intent, startId);
return mRedelivery ? START_REDELIVER_INTENT : START_NOT_STICKY;
}
Wspólna obsługa AsyncTask jest jednym z najlepszych podejść w wielu przypadkach użycia, w których ładowność nie jest duża. lub po prostu utwórz klasę rozszerzającą IntentSerivce. Od wersji Androida 4.0 wszystkie operacje sieciowe powinny odbywać się w tle, w przeciwnym razie kompilacja / kompilacja aplikacji nie powiedzie się. oddzielić wątek od interfejsu użytkownika. Klasa AsyncTask zapewnia jeden z najprostszych sposobów odpalenia nowego zadania z wątku interfejsu użytkownika. Więcej dyskusji na ten temat można znaleźć w poście na blogu
z przewodnika dla programistów Androida :
IntentService to klasa bazowa dla usług, które obsługują żądania asynchroniczne (wyrażone jako intencje) na żądanie. Klienci wysyłają żądania za pośrednictwem połączeń startService (intent); usługa jest uruchamiana w razie potrzeby, obsługuje każdą intencję z kolei za pomocą wątku roboczego i zatrzymuje się, gdy kończy się praca.
Wzorzec projektowy używany w usłudze IntentService
: Ten wzorzec „procesora kolejek roboczych” jest powszechnie używany do odciążania zadań z głównego wątku aplikacji. Klasa IntentService istnieje, aby uprościć ten wzór i zająć się mechaniką. Aby z niego skorzystać, rozszerz IntentService i zaimplementuj onHandleIntent (Intent). Usługa IntentService otrzyma intencje, uruchomi wątek roboczy i odpowiednio zatrzyma usługę.
Wszystkie żądania są obsługiwane w jednym wątku roboczym - mogą zająć tak długo, jak to konieczne (i nie zablokuje głównej pętli aplikacji), ale tylko jedno żądanie będzie przetwarzane jednocześnie.
Klasa IntentService zapewnia prostą strukturę do uruchamiania operacji na pojedynczym wątku w tle. Pozwala to na obsługę długotrwałych operacji bez wpływu na szybkość reakcji interfejsu użytkownika. Ponadto na IntentService nie ma wpływu większość zdarzeń w cyklu życia interfejsu użytkownika, więc nadal działa w okolicznościach, które zamknęłyby AsyncTask.
Usługa IntentService ma kilka ograniczeń:
Nie może oddziaływać bezpośrednio z interfejsem użytkownika. Aby umieścić wyniki w interfejsie użytkownika, musisz wysłać je do działania. Zlecenia pracy są uruchamiane sekwencyjnie. Jeśli operacja jest uruchomiona w usłudze IntentService, a wyślesz jej kolejne żądanie, żądanie czeka na zakończenie pierwszej operacji. Operacja uruchomiona na usłudze IntentService nie może zostać przerwana. Jednak w większości przypadków
IntentService to preferowany sposób na proste operacje w tle
**
Biblioteka Volley
Istnieje biblioteka o nazwie volley-library do tworzenia aplikacji sieciowych dla Androida
. Kod źródłowy jest dostępny publicznie w GitHub.
Oficjalna dokumentacja Androida dotycząca najlepszych praktyk dla zadań w tle : pomaga lepiej zrozumieć celowe usługi, wątki, procedury obsługi, usługi. a także wykonywanie operacji sieciowych
IntentService is used for short tasks (etc) and a service is for long ones
gdzie to przeczytałeś?