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?
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.
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…
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 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ę).
Może być oboma? Tego nie wiedziałem…
Cóż… dziękować
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.