Esta pregunta es antigua, pero hay una respuesta para esta pregunta que no requiere adb, Android Studio, etc. El único requisito es API 23 o más reciente.
Para simular el reinicio de la aplicación por sistema operativo, vaya a la configuración de la aplicación mientras su aplicación se está ejecutando, deshabilite (luego puede habilitar) un permiso y devuelva la aplicación desde aplicaciones recientes. Cuando se deshabilita el permiso, el sistema operativo mata la aplicación pero mantiene los estados de instancia guardados. Cuando el usuario devuelve la aplicación, la aplicación y la última actividad (con estado guardado) se recrean.
El método 'Sin procesos en segundo plano' a veces causa el mismo comportamiento, pero no siempre. Por ejemplo, si la aplicación ejecuta un servicio en segundo plano, "No hay procesos en segundo plano" no hace nada. Pero la aplicación puede ser eliminada por el sistema, incluidos sus servicios. El método de permiso funciona incluso si la aplicación tiene un servicio.
Ejemplo:
Nuestra aplicación tiene dos actividades. La actividad A es la actividad principal que se inicia desde el iniciador. La actividad B se inicia desde la actividad A. Solo mostraré los métodos onCreate, onStart, onStop, onDestroy. Android llama a onSaveInstanceState siempre antes de llamar a onStop, porque el sistema puede eliminar una actividad que está en estado de detención. [ https://developer.android.com/reference/android/app/Activity.html#ActivityLifecycle]
Método de permiso:
<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
Quiero comparar otros métodos que se mencionan en las otras respuestas.
No mantener actividades: esto no mata la aplicación.
<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
Método de detención forzada: no almacena estados de instancia guardados
<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.