To pytanie jest stare, ale istnieje na nie odpowiedź, która nie wymaga adb, Android Studio itp. Jedynym wymaganiem jest API 23 lub nowsze.
Aby zasymulować ponowne uruchomienie aplikacji przez system operacyjny, przejdź do ustawień aplikacji, gdy aplikacja jest uruchomiona, wyłącz (a następnie możesz włączyć) uprawnienia i zwróć aplikację z ostatnich aplikacji. Gdy uprawnienia są wyłączone, system operacyjny zabija aplikację, ale zachowuje zapisane stany instancji. Gdy użytkownik zwraca aplikację, aplikacja i ostatnia aktywność (z zapisanym stanem) są odtwarzane.
Metoda „bez procesów w tle” czasami powoduje to samo zachowanie, ale nie zawsze. Na przykład, jeśli aplikacja działa w tle, „Brak procesów w tle” nic nie robi. Ale aplikacja może zostać zabita przez system, w tym jego usługi. Metoda uprawnień działa, nawet jeśli aplikacja ma usługę.
Przykład:
Nasza aplikacja ma dwa rodzaje aktywności. Działanie A jest głównym działaniem, które jest uruchamiane z programu uruchamiającego. AktywnośćB rozpoczyna się od Aktywności A. Pokażę tylko metody onCreate, onStart, onStop, onDestroy. Android wywołuje onSaveInstanceState zawsze przed wywołaniem onStop, ponieważ działanie, które jest w stanie zatrzymania, może zostać zabite przez system. [ https://developer.android.com/reference/android/app/Activity.html#ActivityLifecycle]
Metoda pozwolenia:
<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
Chcę porównać inne metody, które są wymienione w innych odpowiedziach.
Nie zachowuj działań: nie powoduje to zabicia aplikacji.
<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
Metoda wymuszania zatrzymania: nie przechowuje zapisanych stanów instancji
<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.