2013-02-12 18 views
13

Jestem trochę zdezorientowany odnośnie korzystania z IntentService.Android Jak kolejkować wiele intencji na IntentService

  1. Dokumentacja mówi, że IntentService kolejkuje wszystkie wysłane do niej intencje i przetwarza je pojedynczo.
  2. wziąłem spojrzenie na code of IntentService i widziałem, że onStartCommand() odbiera intencje, nazywa onStart() który wysyła go jako wiadomość do zamiary kolejce

Jestem pewien, że przeczytaj gdzie indziej w dokumentacji, że onStartCommand() jest wywoływany przez system tylko raz, jeśli wydasz dwa razy startService(), drugie wywołanie nie spowoduje wywołania onStartCommand().
Może się mylę, ponieważ szukałem tego dokumentu i nie mogę go znaleźć.
Jest to sprzeczne z poprzednią koncepcją, która mówi, że można kolejkować wiele intencji w IntentService za pomocą metody onStartCommand().

Potrzebuję pomocy tutaj, w jaki sposób mogę kolejkować wiele intencji na IntentService?

widzę tylko dwie opcje:

  • Wystarczy zadzwonić każdym StartService() z różnymi zamiarami

  • połączeń bezpośrednio onStart() lub onStartCommand() (pomijając startService())

Odpowiedz

13

Wysyłasz Intent z Context.startService(), a intencja jest odbierana przez Twoją usługę pod numerem onHandleIntent().

Po raz pierwszy wywołanie startService() spowoduje wywołanie usługi onStartCommand(). Pomyśl o tym jako konstruktorze. Kolejne wywołania do startService() nie wymagają ponownego uruchomienia usługi, ponieważ jest już uruchomiona; po prostu wywołają więcej połączeń z usługą onHandleIntent().

+1

Zgodnie z kodem IntentService (patrz link w moim pytaniu) zobaczysz, że nie można wywołać bezpośrednio naHandleIntent(), tylko komunikat może to zrobić Handler. System musi wywołać funkcję onStart() lub onStartCommand(). – ilomambo

+2

Tak, to prawda. Wszystko, co musisz zrobić, to wywołać 'startService()' i zaimplementować 'onHandleIntent()' wewnątrz usługi. System robi wszystko inne dla Ciebie, w tym decydowanie, jak i kiedy faktycznie uruchomić usługę. –

+0

Sidenote: Czy to oznacza, że ​​mogę przechwycić kolejność zamiarów przez nadpisanie * onStart() *? (Wiem, że to brzmi źle, ponieważ * onStart() * został wycofany jako API, ale w zasadzie?) – ilomambo

Powiązane problemy