Figura 1 - Molti zombi sono stati uccisi durante la ricerca di questa risposta
Non è consigliabile terminare un processo Java VM di un'applicazione Android a livello di sistema operativo. Sfortunatamente, questo è esattamente ciò che fa la finestra del dispositivo eclipse "stop", così come System.exit () e il comando "kill" della shell.
Questo sovverte i normali metodi del ciclo di vita delle app come onStop (), onDestroy () e finalize ().
Molte app richiedono questi metodi per un'uscita graduale (ad esempio, se utilizzano oggetti di sistema come Sensor, MediaPlayer, Equalizer, Visualizer, ecc.).
Questi oggetti di sistema si aggirano con le prese di morte degli zombi sulle risorse di sistema se release () non viene chiamato esplicitamente durante questi metodi del ciclo di vita. Vedi fig. 1 sopra. Ciò può impedire il riavvio di un'app e persino richiedere un riavvio. Questo è l'aspetto sgraziato.
L'unica soluzione è assicurarti di uscire sempre dall'app in modo pulito con una chiamata a onStop () o onDestroy () o almeno finalize (). Il debugger lo fa, così come il sistema operativo all'arresto.
Puoi impostare la tua app per intercettare gli eventi SIG_HUP al fine di forzare un'uscita graduale dalla riga di comando.
L'unica volta in cui interromperesti la VM dell'app è in stato ANR (già uno zombie). Gli ANR devono essere corretti. Non distribuire mai un'app che possa entrare in questo stato. È estremamente scortese.
Puoi utilizzare Google Analytics e il Play Store per monitorarli durante la distribuzione. Non vuoi che utenti arrabbiati diano recensioni ANR a stella singola dopo aver dovuto riavviare a causa della tua applicazione zombie. Molto brutto.
Ricorda che Android è Linux: trattalo come un vero sistema operativo e rispetta il ciclo di vita dell'app, altrimenti dovrai sicuramente affrontare la temuta Apocalisse Zombie.
PS: Se non ti piace l'analogia con gli zombi, che ne dici di Fantasia?
