0

Ich schreibe einen Dienst, der im Hintergrund geöffnet bleibt und Benutzeraktionen aufzeichnet.Wie kann man wissen, ob ein Benutzer onDestroy in einer Aktivität und nicht im System ausgelöst hat?

Wenn nun ein Benutzer die App-Aktivität beendet, indem er im App-Bildschirm die Zurück-Taste drückt oder die App wegwischt, möchte ich auch den Hintergrunddienst beenden, aber wenn Android onDestroy aufruft, wegen einer Orientierungsänderung oder aus irgendeinem anderen Grund sollte der Dienst noch im Hintergrund ausgeführt werden.

Dafür muss ich den Unterschied im Code, wenn der Benutzer die Aktivität geschlossen oder wenn es Android war.

Für die Zurück-Taste ist dies eine einfache Lösung, überschreiben Sie einfach die onBackpressed und alles ist in Ordnung, dies wird jedoch nicht aufgerufen, wenn der Benutzer die App aus dem letzten apps Bildschirm wischt.

+0

Verwendungsflag backpress Ereignis zu identifizieren. Bei der Änderung der Ausrichtung erhalten Sie den Konfigurations-SystemaufrufConfigurationChanged. Während des Wischens der App von einem letzten Bildschirm oder einer im Hintergrund getöteten Anwendung (Prozess) wird Ihr App-Dienst onDestroyed aufgerufen. –

Antwort

1

Sie können this.isFinishing() für Ihre Aktivität überprüfen, wenn onDestroy aufgerufen wird.

Weitere hier Acrivity.onDestroy

+0

P.S. Es ist keine gute Idee, den Dienst in onDestroy zu stoppen, weil es nicht notwendig ist, onDestroy aufzurufen, während die Aktivität zerstört – MaxV

+0

Danke, dass ich das beim Lesen der Dokumentation übersehen habe. Was meinst du mit deinem P. S.? Wird der 'onDestroy()' beim Beenden einer Aktivität nicht immer aufgerufen? Und ich werde wahrscheinlich 'isFinishing()' auf die 'onPause' schreiben, um zu prüfen, ob das Ende aufgerufen wurde. – Raeglan

+0

[link] (https://developer.android.com/reference/android/app/Activity.html#onDestroy()) Es gibt Situationen, in denen das System den Hostingprozess der Aktivität einfach abbricht, ohne diese Methode (oder andere) aufzurufen) Es sollte also nicht dazu verwendet werden, Dinge zu tun, die nach dem Prozess verbleiben sollen. Der gute Ort, um Service zu stoppen, ist onStop() -Methode und starten Sie den Dienst in onStart() -Methode in Bezug auf isFinishing() Wert – MaxV

Verwandte Themen