1

Android のアクティビティで静的変数を使用しています (メインのアクティビティではありません)。しかし、メイン アクティビティに移動して戻るボタンを押しても、静的な値は変わりません。戻るボタンはメイン プロセスを強制終了しません。なんで?

4

3 に答える 3

8

戻るボタンを使用すると、アプリケーションはなくアクティビティが破棄されます。すべてのアクティビティは、Dalvik VM で実行されているアプリケーションの一部です。システムがリソースが必要であると判断し、プロセスを強制終了するまで、(すべてのアクティビティが破棄された場合でも) アプリケーションは引き続き実行されます

そのため、プロセス/アプリが実行されている限り、静的メンバーはメモリに残ります。

メモリを集中的に使用するアプリケーションを実行したり、実行中のアプリケーションをタスク マネージャで閉じたりすると、静的な値がリセットされることがあります。

于 2012-07-26T14:20:21.470 に答える
1

ユーザーが戻るボタンを押してメイン アクティビティから移動しても、アクティビティが破棄されるとは限りません。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>

上記のすべては、ユーザーが (シナリオの [戻る] ボタンによって) アクティビティを離れたときに、必ずしも破棄されないことを示しています。停止されるのは最初だけです。

于 2012-07-26T12:52:25.310 に答える
1

これで試して、

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event)
    {
        if ((keyCode == KeyEvent.KEYCODE_BACK))
        {
            finish();
            System.exit(0);
        }
        return super.onKeyDown(keyCode, event);
    }
于 2012-07-26T12:48:34.040 に答える