Diese Frage ist alt, aber es gibt eine Antwort auf diese Frage, für die kein ADB, Android Studio usw. erforderlich ist. Die einzige Anforderung ist API 23 oder neuer.
Um einen App-Neustart nach Betriebssystem zu simulieren, gehen Sie zu den App-Einstellungen, während Ihre App ausgeführt wird, deaktivieren Sie eine Berechtigung (dann können Sie sie aktivieren) und geben Sie die App von den letzten Apps zurück. Wenn die Berechtigung deaktiviert ist, beendet das Betriebssystem die App, behält jedoch die gespeicherten Instanzzustände bei. Wenn der Benutzer die App zurückgibt, werden die App und die letzte Aktivität (mit gespeichertem Status) neu erstellt.
Die Methode "Keine Hintergrundprozesse" verursacht manchmal dasselbe Verhalten, aber nicht immer. Wenn in der App beispielsweise ein Hintergrunddienst ausgeführt wird, führt "Keine Hintergrundprozesse" nichts aus. Die App kann jedoch vom System einschließlich seiner Dienste beendet werden. Die Berechtigungsmethode funktioniert auch dann, wenn die App über einen Dienst verfügt.
Beispiel:
Unsere App hat zwei Aktivitäten. AktivitätA ist die Hauptaktivität, die vom Launcher aus gestartet wird. Aktivität B wird von Aktivität A gestartet. Ich werde nur die Methoden onCreate, onStart, onStop und onDestroy anzeigen. Android ruft onSaveInstanceState immer vor dem Aufruf von onStop auf, da eine Aktivität, die sich im Stoppzustand befindet, vom System beendet werden kann. [ https://developer.android.com/reference/android/app/Activity.html#ActivityLifecycle]
Berechtigungsmethode:
<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
Ich möchte andere Methoden vergleichen, die in den anderen Antworten erwähnt werden.
Aktivitäten nicht behalten: Dies beendet die Anwendung nicht.
<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
Stop-Methode erzwingen: Speichert keine gespeicherten Instanzzustände
<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.