Pertanyaan ini sudah lama tetapi, ada jawaban untuk pertanyaan ini yang tidak memerlukan adb, Android Studio dll. Satu-satunya persyaratan adalah API 23 atau lebih baru.
Untuk mensimulasikan restart aplikasi oleh OS, buka pengaturan aplikasi saat aplikasi Anda berjalan, nonaktifkan (lalu Anda dapat mengaktifkan) izin dan kembalikan aplikasi dari aplikasi terbaru. Ketika izin dinonaktifkan, OS membunuh aplikasi tetapi menyimpan status instance yang disimpan. Saat pengguna mengembalikan aplikasi, aplikasi dan aktivitas terakhir (dengan status tersimpan) dibuat kembali.
Metode 'Tidak ada proses latar belakang' terkadang menyebabkan perilaku yang sama, tetapi tidak selalu. Misalnya, jika aplikasi menjalankan layanan latar belakang, "Tidak ada proses latar belakang" tidak melakukan apa-apa. Tetapi aplikasi dapat dibunuh oleh sistem termasuk layanannya. Metode izin berfungsi bahkan jika aplikasi memiliki layanan.
Contoh:
Aplikasi kami memiliki dua kegiatan. ActivityA adalah aktivitas utama yang dimulai dari launcher. ActivityB dimulai dari ActivityA. Saya hanya akan menunjukkan metode onCreate, onStart, onStop, onDestroy. Android memanggil onSaveInstanceState selalu sebelum memanggil onStop, karena aktivitas yang dalam keadaan berhenti dapat dimatikan oleh sistem. [ https://developer.android.com/reference/android/app/Activity.html#ActivityLifecycle]
Metode izin:
<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
Saya ingin membandingkan metode lain yang disebutkan pada jawaban lainnya.
Jangan simpan aktivitas: Ini tidak mematikan aplikasi.
<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
Metode penghentian paksa: Tidak menyimpan status instance yang disimpan
<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.