私の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()でバンドルにパッケージ化する必要があるのはどれですか?アクティビティが破棄されたときに、システムはこれらの変数に対して何かを行いますか?