Android のアクティビティで静的変数を使用しています (メインのアクティビティではありません)。しかし、メイン アクティビティに移動して戻るボタンを押しても、静的な値は変わりません。戻るボタンはメイン プロセスを強制終了しません。なんで?
3 に答える
戻るボタンを使用すると、アプリケーションではなくアクティビティが破棄されます。すべてのアクティビティは、Dalvik VM で実行されているアプリケーションの一部です。システムがリソースが必要であると判断し、プロセスを強制終了するまで、(すべてのアクティビティが破棄された場合でも) アプリケーションは引き続き実行されます。
そのため、プロセス/アプリが実行されている限り、静的メンバーはメモリに残ります。
メモリを集中的に使用するアプリケーションを実行したり、実行中のアプリケーションをタスク マネージャで閉じたりすると、静的な値がリセットされることがあります。
ユーザーが戻るボタンを押してメイン アクティビティから移動しても、アクティビティが破棄されるとは限りません。UI(アクティビティ)が見えないように移動するだけです。https://developer.android.com/reference/android/app/Activity.htmlおよびhttps://developer.android.com/training/basics/activity-lifecycle/index.htmlを参照してください。
アップデート:
以下は、その 2 番目の Web ページからのテキストの一部です。アクティビティが停止している間にユーザーが戻ると、システムは onRestart() (2) を呼び出し、すぐに onStart() (3) と onResume() (4) が続きます。アクティビティが停止する原因がどのようなシナリオであっても、システムは常に onStop() を呼び出す前に onPause() を呼び出すことに注意してください。」</p>
そして「注: システムは停止時にアクティビティ インスタンスをシステム メモリに保持するため、…」</p>
そして、「アクティビティが onStop() メソッドへの呼び出しを受け取ると、…. アクティビティが停止すると、システム メモリを回復する必要がある場合、システムはインスタンスを破棄する可能性があります。極端な場合、システムは、アクティビティの最後の onDestroy() コールバックを呼び出さずに、単にアプリ プロセスを強制終了することがあります。「</p>
上記のすべては、ユーザーが (シナリオの [戻る] ボタンによって) アクティビティを離れたときに、必ずしも破棄されないことを示しています。停止されるのは最初だけです。
これで試して、
@Override
public boolean onKeyDown(int keyCode, KeyEvent event)
{
if ((keyCode == KeyEvent.KEYCODE_BACK))
{
finish();
System.exit(0);
}
return super.onKeyDown(keyCode, event);
}