이 질문은 오래되었지만 adb, Android Studio 등을 필요로하지 않는이 질문에 대한 답변이 있습니다. 유일한 요구 사항은 API 23 이상입니다.
OS 별 앱 다시 시작을 시뮬레이션하려면 앱이 실행되는 동안 앱 설정으로 이동하여 권한을 비활성화 (활성화 한 후 활성화) 한 다음 최근 앱에서 앱을 반환하십시오. 권한이 비활성화되면 OS가 앱을 종료하지만 저장된 인스턴스 상태는 유지합니다. 사용자가 앱을 반환하면 앱과 마지막 활동 (저장된 상태)이 다시 생성됩니다.
'백그라운드 프로세스 없음'방법으로 동일한 동작이 발생하지만 항상 그런 것은 아닙니다. 예를 들어 앱에서 백그라운드 서비스를 실행중인 경우 "배경 프로세스 없음"은 아무 작업도 수행하지 않습니다. 그러나 응용 프로그램은 서비스를 포함하여 시스템에 의해 종료 될 수 있습니다. 앱에 서비스가 있어도 권한 방법이 작동합니다.
예:
우리 앱에는 두 가지 활동이 있습니다. ActivityA는 런처에서 시작되는 주요 활동입니다. ActivityB는 ActivityA에서 시작됩니다. onCreate, onStart, onStop, onDestroy 메소드 만 표시합니다. Android는 중지 상태 인 활동이 시스템에 의해 종료 될 수 있으므로 onStop을 호출하기 전에 항상 onSaveInstanceState를 호출합니다. [ https://developer.android.com/reference/android/app/Activity.html#ActivityLifecycle]
권한 방법 :
<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
다른 답변에 언급 된 다른 방법을 비교하고 싶습니다.
활동을 유지하지 마십시오. 응용 프로그램이 종료되지 않습니다.
<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
강제 중지 방법 : 저장된 인스턴스 상태를 저장하지 않습니다
<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.