Abbildung 1 - Bei der Untersuchung dieser Antwort wurden viele Zombies getötet
Das Beenden eines Java VM-Prozesses für Android-Anwendungen auf Betriebssystemebene wird nicht empfohlen. Leider ist dies genau das, was das Eclipse-Gerätefenster "stop" tut, ebenso wie System.exit () und der Shell-Befehl "kill".
Dies untergräbt die normalen Methoden des App-Lebenszyklus wie onStop (), onDestroy () und finalize ().
Viele Apps erfordern diese Methoden für ein ordnungsgemäßes Beenden (z. B. wenn sie Systemobjekte wie Sensor, MediaPlayer, Equalizer, Visualizer usw. verwenden).
Diese Systemobjekte hängen mit Zombie-Todesgriffen auf Systemressourcen herum, wenn release () während dieser Lebenszyklusmethoden nicht explizit aufgerufen wird. Siehe Abb. 1 oben. Dies kann einen Neustart einer App verhindern und sogar einen Neustart erfordern. Das ist der unanständige Aspekt.
Die einzige Lösung besteht darin, sicherzustellen, dass Sie Ihre App immer sauber beenden, indem Sie onStop () oder onDestroy () aufrufen oder zumindest finalize (). Der Debugger tut dies ebenso wie das Betriebssystem beim Herunterfahren.
Sie können Ihre App so einstellen, dass SIG_HUP-Ereignisse abgefangen werden, um ein ordnungsgemäßes Beenden der Befehlszeile zu erzwingen.
Das einzige Mal, dass Sie die App-VM beenden würden, ist der ANR-Status (bereits ein Zombie). ANRs müssen behoben werden. Stellen Sie niemals eine App bereit, die in diesen Status wechseln kann. Es ist extrem unhöflich.
Sie können Google Analytics und den Play Store verwenden, um diese bei der Bereitstellung zu überwachen. Sie möchten nicht, dass verärgerte Benutzer nach dem Neustart aufgrund Ihrer Zombie-Anwendung ANR-Bewertungen mit einem Stern abgeben. Sehr schlecht.
Denken Sie daran, dass Android Linux ist: Behandeln Sie es wie ein echtes Betriebssystem und respektieren Sie den App-Lebenszyklus, sonst werden Sie sicherlich der gefürchteten Zombie-Apokalypse gegenüberstehen.
PS: Wenn dir die Zombie-Analogie nicht gefällt, wie wäre es dann mit Fantasia?