Intent BundleExtra を介してアクティビティを作成するときに、アクティビティにブール値を渡します。アクティビティのライフサイクルを見ると、アクティビティが停止した場合 ( onStop
)、別のアプリがメモリを必要とするため、アプリ プロセスが強制終了され、ユーザーがアクティビティに移動します ( onCreate
)。最後の onCreate には、渡した元のブール値が含まれますか? そのブール値を保存したい場合は、に保存する必要があると思いOnSaveInstanceState
ますよね?
3 に答える
実際には、アクティビティが再作成されると、元のインテントが引き続き使用されます。 getIntent()
最初に作成されたときと同じインテントを返します。ただし、アクティビティが再作成されたときに保持したい他のデータがある場合は、 を使用して保存する必要がありますsaveInstanceState()
。アクティビティが実行されている状態でデバイスを回転させるだけで、これを確認できます。これは、デバイスが破棄され、同じ意図で再作成されるためです。詳細については、こちらを参照してください。
この理由で onPause() を使用します(ドキュメントから)
onPause() ではなく onSaveInstanceState(Bundle) で永続データを保存することが重要であることに注意してください。後者はライフサイクル コールバックの一部ではないため、ドキュメントに記載されているように、すべての状況で呼び出されるわけではありません。
次に、onCreate()
たとえばデータベースまたは保存した他のリソースから再度読み取ります。
したがって、そのブール値がどれほど重要であるかに応じて、必要な保存メカニズムを使用します..永続的な状態のために: http://developer.android.com/reference/android/app/Activity.html#SavingPersistentState
また、単純なテキストなどの UI 状態の場合、選択はonSaveInstanceState
次のように使用されます: Save Instance State を使用した Android アクティビティ状態の保存
要約として:プロセスが終了したときブール値= 保存されていない場合は消えました:)
Mauno V. は正しいです。あなたの場合は、onPause() を使用する必要があります。
実際、 onSaveInstanceState(Bundle bundle) は、現在のインスタンスの状態を保存するように設計されています。したがって、アプリが強制終了されると、保存されたバンドルも
SharedPreferences を使用して boolean を保存できます。
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context);
sharedPreferences.edit().putBoolean("hiBoolean", booleanValue).commit();
そしてあなたの onCreate でそれを取得します:
Boolean hiBoolean = sharedPreferences.getBoolean("hiBoolean", true);