Questa domanda è vecchia ma, c'è una risposta per questa domanda che non richiede adb, Android Studio ecc. L'unico requisito è API 23 o più recente.
Per simulare il riavvio dell'app dal sistema operativo, vai alle impostazioni dell'app mentre l'app è in esecuzione, disabilita (quindi puoi abilitare) un'autorizzazione e restituisci l'app dalle app recenti. Quando l'autorizzazione è disabilitata, il sistema operativo uccide l'app ma mantiene gli stati di istanza salvati. Quando l'utente restituisce l'app, vengono ricreate l'app e l'ultima attività (con stato salvato).
Il metodo "Nessun processo in background" provoca talvolta lo stesso comportamento, ma non sempre. Ad esempio, se l'app esegue un servizio in background, "Nessun processo in background" non fa nulla. Ma l'app può essere uccisa dal sistema, inclusi i suoi servizi. Il metodo di autorizzazione funziona anche se l'app ha un servizio.
Esempio:
La nostra app ha due attività. L'attività A è l'attività principale avviata dal programma di avvio. ActivityB viene avviato da ActivityA. Mostrerò solo i metodi onCreate, onStart, onStop, onDestroy. Android chiama onSaveInstanceState sempre prima di chiamare onStop, perché un'attività in stato di arresto può essere interrotta dal sistema. [ https://developer.android.com/reference/android/app/Activity.html#ActivityLifecycle]
Metodo di autorizzazione:
<start app from launcher first time>
Application onCreate
ActivityA onCreate WITHOUT savedInstance
ActivityA onStart
<open ActivityB>
ActivityB onCreate WITHOUT savedInstance
ActivityB onStart
ActivityA onStop (the order is like this, it is stopped after new one is started)
<go settings>
ActivityB onStop
<disable a permission>
//Application is killed, but onDestroy methods are not called.
//Android does not call onDestroy methods if app will be killed.
<return app by recent apps>
Application onCreate (this is the important part. All static variables are reset.)
ActivityB onCreate WITH savedInstance (user does not notice activity is recreated)
//Note that ActivityA is not created yet, do not try to access it.
ActivityB onStart
<return ActivityA by back>
ActivityA onCreate WITH savedInstance (user does not notice activity is recreated)
ActivityA onStart
ActivityB onStop
ActivityB onDestroy
<press back again, return launcher>
ActivityA onStop
ActivityA onDestroy
<open app again>
//does not call Application onCreate, app was not killed
ActivityA onCreate WITHOUT savedInstance
ActivityA onStart
Voglio confrontare altri metodi che sono menzionati nelle altre risposte.
Non mantenere le attività: questo non uccide l'applicazione.
<start app from launcher first time>
Application onCreate
ActivityA onCreate WITHOUT savedInstance
ActivityA onStart
<open ActivityB>
ActivityB onCreate WITHOUT savedInstance
ActivityB onStart
ActivityA onStop
ActivityA onDestroy (do not keep)
<return launcher by home button>
ActivityB onStop
ActivityB onDestroy (do not keep)
<retun app from recent apps>
// NO Application onCreate
ActivityB onCreate WITH savedInstance (user does not notice activity recreated)
ActivityB onStart
<return ActivityA by back>
ActivityA onCreate WITH savedInstance (user does not notice activity recreated)
ActivityA onStart
ActivityB onStop
ActivityB onDestroy
<press back again, return launcher>
ActivityA onStop
ActivityA onDestroy
<open app again>
//does not call Application onCreate, app was not killed
ActivityA onCreate WITHOUT savedInstance
ActivityA onStart
Forza metodo di arresto: non memorizza gli stati di istanza salvati
<start app from launcher first time>
Application onCreate
ActivityA onCreate WITHOUT savedInstance
ActivityA onStart
<open ActivityB>
ActivityB onCreate WITHOUT savedInstance
ActivityB onStart
ActivityA onStop
<go settings>
ActivityB onStop
<force stop, return app from recent apps>
Application onCreate
ActivityA onCreate WITHOUT savedInstance
//This is important part, app is destroyed by user.
//Root activity of the task is started, not the top activity.
//Also there is no savedInstance.