[Java+Android] Jak znaleźć działający w tle serwis?


(Kamiljano) #1

Mam aplikację, która tworzy działający w tle IntentService. Generalnie założenie jest takie, że nawet gdy zamknę aplikację, serwis będzie działał. Czy istnieje jednak sposób, żeby po ponownym włączeniu aplikacji sprawdzić, czy serwis wciąż działa w tle i ewentualnie zdobyć do niego uchwyt?


(Fiołek) #2

IntentService nie jest przeznaczony do działania w tle non-stop - on tylko przyjmuje zadanie i wykonuje je.

To, co chcesz osiągnąć robi się przez "zwykły" Service. Polecam zapoznać się z dokumentacją usługi(w szczególności jej cyklem życia) oraz dokumentem Fundamentals/Services, w szczególności sekcją bound services.


(Kamiljano) #3

Dziękuję za radę, ale czytałem dokumentację, a wynika z niej, że jedyna ważniejsza różnica pomiędzy IntentService i Service jest taka, że Service ogarnia więcej niż jeden wątek. Skoro radzisz mi patrzeć na cykl życia, to prawdopodobnie pomyliłeś sobie IntentService z Bound serwisami, które jednakowoż umierają, gdy tylko padną wszystkie z nimi powiązania, co następuje w momencie wyłączenia programu...

W całej dokumentacji jednak nie widzę odpowiedzi na moje pytanie...


(Fiołek) #4

To nie jedyna różnica. IntentService jest usługą z rodzaju "daj zadanie, zrób, (ewentualnie zwróć wynik), zapomnij" - typu pobieranie/wysyłanie plików.

Nie, nie pomyliłem :wink: Każda usługa może być jednocześnie "started service"(uruchamiamy i sobie działa) i "bound service"(komunikujemy się z nią). Sam ostatnio taką implementowałem. Nie jest to zadanie trywialne, bo ładnie rozwiązać dedukcję, kiedy zatrzymać usługę nie jest takie proste(chyba, że jest tak jak w moim przypadku - to użytkownik decyduje, kiedy włączyć/wyłączyć usługę).


(Kamiljano) #5

Może być oboma? Tego nie wiedziałem...

Cóż... dziękować :slight_smile:


(Fiołek) #6

Dlatego kazałem przeczytać cykl życia. Tak, jeśli wystartujesz usługę za pomocą startService, nie zostanie ona zatrzymana dopóki nie zostanie wywołane stopSelf lub stopService. Pozwala to na komunikację z działającymi usługami za pomocą binderów.