Bu soru eskidir, ancak bu soru için adb, Android Studio vb. Gerektirmeyen bir cevap vardır. Tek gereksinim API 23 veya daha yenisidir.
İşletim sistemi tarafından uygulamanın yeniden başlatılmasını simüle etmek için, uygulamanız çalışırken uygulama ayarlarına gidin, bir izni devre dışı bırakın (ardından etkinleştirebilirsiniz) ve uygulamayı son uygulamalardan döndürün. İzin devre dışı bırakıldığında, işletim sistemi uygulamayı öldürür ancak kaydedilen örnek durumlarını korur. Kullanıcı uygulamayı döndürdüğünde, uygulama ve son etkinlik (kaydedilmiş durumla birlikte) yeniden oluşturulur.
'Arka plan işlemi yok' yöntemi bazen aynı davranışa neden olur, ancak her zaman değil. Örneğin, uygulama bir arka plan hizmeti çalıştırıyorsa, "Arka plan işlemi yok" hiçbir şey yapmaz. Ancak uygulama hizmetleri de dahil olmak üzere sistem tarafından öldürülebilir. Uygulamada bir hizmet olsa bile izin yöntemi çalışır.
Misal:
Bizim app iki faaliyet vardır. ActivityA, başlatıcıdan başlatılan ana etkinliktir. ActivityB, ActivityA'dan başlatılır. Yalnızca onCreate, onStart, onStop, onDestroy yöntemlerini göstereceğim. Android, onStop'u çağırmadan önce her zaman onSaveInstanceState'i çağırır, çünkü durma durumunda olan bir etkinlik sistem tarafından öldürülebilir. [ https://developer.android.com/reference/android/app/Activity.html#ActivityLifecycle]
İzin yöntemi:
<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
Diğer cevaplarda bahsedilen diğer yöntemleri karşılaştırmak istiyorum.
Faaliyetleri tutmayın: Bu, uygulamayı öldürmez.
<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
Zorla durdurma yöntemi: Kayıtlı örnek durumlarını saklamaz
<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.