3

Android は静的クラスをどのように処理しますか? 特に、次のように静的変数を宣言すると:

private static boolean someBoolean = true;
...
// Somewhere else in the code I do this:
    someBoolean = false;

someBooleanまた、その最後の行だけが、初期化された値から変更されたtime の値であるとしましょう。someBoolean滞在期間はfalse?ユーザーはどのようにこれをリセットできますか? アプリの強制終了は機能しますか? アプリをアンインストールする必要がありますか? データを消去しますか? そのキャッシュ?

この静的変数が他の誰かの SDK にある場合はどうなりますか? 私が書いたアプリコードにあるときに変数がどのように再インスタンス化されるかを理解していると思いますが、これが何らかのjarからロードされたコードである場合はどうなりますか?someBoolean再宣言され、その後に初期化されるのはtrueいつですか? 上記と同様に、ユーザーはどのようにこの動作を強制できますか? 強制終了?データを消去しますか?

4

2 に答える 2

4

ClassLoader によってクラスがロードされると、静的変数が初期化されます。すべての仮想マシン インスタンスには、少なくとも 1 つの ClassLoader があります。どの OS でも、すべての Java プロセスには 1 つの仮想マシンがあります。したがって、変数をリセットするには、プロセスを強制終了/停止する必要があります。Android では、アクティビティに関連付けられたプロセスは引き続きバックグラウンドにとどまるため、アクティビティが一時停止した後でもすべての静的変数が保持されることに注意してください。

DDMS を使用してこの動作を確認し、アクティビティに関連付けられているプロセスを強制終了できます。

于 2012-09-18T18:30:41.270 に答える
2

クラスがアンロードさsomeBooleanれると、静的変数が GC の対象になります。

someBooleanクラスの開始時 (ロード後) に開始されます。

someBooleanコードで別の値を設定するまで false のままにします。

于 2012-09-18T18:22:32.600 に答える