2

私のAndroidアプリで状態を維持し、ユーザーが中断したアクティビティに戻るようにするために、マニフェストに非常に便利なフラグalwaysRetainTaskStateを設定しました。

<activity android:name=".Main"
              android:label="@string/app_name"
              android:alwaysRetainTaskState="true"> 
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

これで仕事は終わりだと思いました。システムは、状態を維持しながら、メモリを保持するためにアプリのアクティビティを破棄できることを発見しました。これを確認するために、ループ内に多数のアクティビティを作成して、アプリのアクティビティが破棄されるかどうかを確認する小さなテストアプリを作成しました。案の定、システムは私の活動を破壊します。

少し読んでみると、アクティビティの状態を維持するためにonSaveInstanceState()とonRestoreInstanceState()を使用する必要があることがわかりました。

私の質問にたどり着くために、いくつかのグローバル変数を持つアクティビティがあり、それらのいくつかは静的であり、いくつかはそうではないとしましょう。それらはブール値、配列リスト、文字列などで構成されています。私の問題は、アクティビティが破棄されたときにこれらの変数のどれが永続的であるか混乱していることです。onSaveInstanceState()でバンドルにパッケージ化する必要があるのはどれですか?アクティビティが破棄されたときに、システムはこれらの変数に対して何かを行いますか?

4

1 に答える 1

5

いくつかのグローバル変数を持つアクティビティがあるとしましょう。それらのいくつかは静的であり、いくつかはそうではありません。

Javaには「グローバル変数」のようなものはありません。また、非最終的な(つまり、変更可能な)静的データメンバーは、可能な限り避ける必要があります。

onSaveInstanceState()でバンドルにパッケージ化する必要があるのはどれですか?

それは要約で答えることは不可能です。

アクティビティが破棄されたときに、システムはこれらの変数に対して何かを行いますか?

おそらく。静的データメンバーは、プロセスが存続する限り存続します。最後のアクティビティが破棄されると、プロセスはそれほど遠くない将来に終了し、それらの静的データメンバーは削除されます。アプリケーションの次回の実行時に、これらの静的データメンバーが再初期化されます。

于 2010-01-22T07:20:07.167 に答える