この質問は古いですが、adb、Android Studio などを必要としないこの質問に対する回答があります。唯一の要件は API 23 以降です。
OS によるアプリの再起動をシミュレートするには、アプリの実行中にアプリの設定に移動し、アクセス許可を無効にして (その後、有効にすることができます)、最近のアプリからアプリを返します。アクセス許可が無効になっている場合、OS はアプリを強制終了しますが、保存されたインスタンスの状態は保持します。ユーザーがアプリを返すと、アプリと最後のアクティビティ (保存された状態) が再作成されます。
「バックグラウンド プロセスなし」メソッドは、同じ動作を引き起こす場合がありますが、常にではありません。たとえば、アプリがバックグラウンド サービスを実行している場合、「バックグラウンド プロセスなし」は何もしません。ただし、アプリは、そのサービスを含むシステムによって強制終了される可能性があります。アプリにサービスがある場合でも、許可方法は機能します。
例:
アプリには 2 つのアクティビティがあります。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.