Normalmente, uscire la mia domanda chiamando:Perché l'applicazione a volte si riavvia su killProcess?
android.os.Process.killProcess(android.os.Process.myPid());
esegue bene senza incidenti.
Ma ogni tanto l'applicazione si riavvia nuovamente (dopo essere usciti!).
delle relative e spettacoli registro frammento:
.631: I/Process(15495): Sending signal. PID: 15495 SIG: 9
.641: W/AudioFlinger(121): write blocked for 252 msecs, 1279 delayed writes, thread 0xdc18
.651: I/ActivityManager(164): Process com.ef.myapp (pid 15495) has died.
.651: I/WindowManager(164): WIN DEATH: Window{463659e8 com.ef.myapp/com.ef.myapp.MainActivity paused=false}
.661: I/AudioService(164): AudioFocus abandonAudioFocus() from [email protected]
.701: I/ActivityManager(164): Start proc com.ef.myapp for activity com.ef.myapp/.MainActivity: pid=15589 uid=10077 gids={3003}
so che, per la progettazione del sistema operativo Android, killProcess() non è il modo corretto per terminare un'applicazione. Questo perché killProcess() interrompe il processo immediately senza dare alcun modo o possibilità per l'app di impedirlo o prepararsi per esso.
So che quando chiamo finish(), lo stack di applicazioni viene semplicemente spostato sullo sfondo (ed esiste ancora nella memoria). Lo stesso Android decide quando chiudere l'applicazione (cioè rimuovere la sua istanza dalla memoria) e generalmente questo viene fatto quando l'applicazione diventa "la più vecchia non usata per il tempo più lungo". Il suo comportamento è in realtà più prevedibile se è davvero lo last one.
Il problema è che finish() interrompe e distrugge solo l'attività per la quale è stato chiamato. Non blocca altre attività generate dall'applicazione o da altre attività. Quindi, per facilitare il test di debug durante lo sviluppo, sto usando killProcess() come una comoda scorciatoia.
Ma ora vedo che questo ha l'effetto collaterale dell'applicazione volte riavviare immediatamente dopo l'uccisione in sé - tutti entro 30 millisecondi.
Una soluzione semplice sarebbe quella di iterare attraverso tutte le attività dell'applicazione e finish() di loro. Ma prima di procedere con questo, sto morendo dalla voglia di capire ciò che nel sistema operativo Android fa ricominciare un'applicazione stessa.
Perché Android riavviava l'applicazione?
E perché inconsistentemente? (ad esempio a volte)
Avete ricevitori broadcast con filtri intent registrati nel manifesto? Ciò provocherebbe l'avvio della tua app. –