2015-03-28 13 views
9

Staram się, aby usługa działała nieprzerwanie aż do zamknięcia aplikacji użytkownika.Zatrzymaj usługę po zamknięciu aplikacji

Używam metody startService() z metody onCreate() metody mojej głównej aktywności i metody stopService() w metodzie onDestroy().

Teraz mam problem, ponieważ wygląda na to, że moja główna działalność ginie i jest ponownie tworzona po obróceniu urządzenia lub wyłączeniu ekranu.

Jak mogę zatrzymać usługę tylko wtedy, gdy użytkownik ręcznie przerywa aplikację?

+0

Użytkownicy naprawdę nie zamykają aplikacji w systemie Android. Co masz na myśli przez "zamknięcie aplikacji użytkownika"? – CommonsWare

+0

Mam na myśli zamierzone zamknięcie aplikacji. Po usunięciu użytkownika z aplikacji na ekranie "ostatnich aplikacji". – Kamil

Odpowiedz

-11

Zacznij od dodania węzła android: configChanges do węzła manifestu działania, aby zatrzymać działanie ponownego uruchomienia po obróceniu urządzenia.

Teraz, aby wykryć zamknięcie zdarzenia aplikacji, zastanów się, w jaki sposób użytkownik może ręcznie zamknąć aplikację. W Androidzie, naciskając przycisk Wstecz lub przycisk Home. Tak więc umieść detektor kluczy zdarzeń dla przycisku powrotu na stronie głównej & i zakończ usługę.

10

Mam na myśli celowe zamknięcie aplikacji. Po usunięciu użytkownika z aplikacji na ekranie "ostatnich aplikacji".

To nie jest "zamknięcie aplikacji" pod względem systemu Android. To jest "usunięcie zadania" (lub czasami "zatrzymanie zadania" - Google nie jest zbyt konsekwentny w zakresie terminologii).

Po usunięciu zadania należy zadzwonić pod numer with onTaskRemoved(). Powinno to jednak mieć miejsce zarówno wtedy, gdy użytkownik ręcznie usuwa zadanie na ekranie przeglądu (a.k.a., lista ostatnich zadań), jak i gdy zadanie znika naturalnie na Androidzie 4.4 i starszym, ponieważ zadanie jest za stare.

+1

Ta niespójność terminologiczna w systemie Android doprowadza mnie do szału ...:/ – Kamil

42

Ustaw poniżej atrybut w tagu serwisowego w pliku manifestu,

<service android:name="service" android:stopWithTask="true"/> 

dodając ten wywoła ondestroy() usługi, gdy zadanie jest usuwany (aplikacja zamknięte z niedawnym liście aplikacji).

+1

W moim przypadku nie zadziałało, ponieważ uruchamiałem usługę za pomocą programu AlarmManager. Ale wydaje się, że jest to poprawna odpowiedź na przykład w przypadku usług otwartych w ramach działalności. – mizerablebr

+0

Dzięki! Uratujesz mój dzień! –

Powiązane problemy