2012-08-24 11 views
5

Intent BundleExtraを使用してアクティビティにブール値を渡します。今度はactivity lifecycleを見て、私の活動が止まったら(onStop)、別のアプリがメモリを必要とするので、アプリプロセスが殺された後、ユーザはアクティビティ(onCreate)にナビゲートします。最後のonCreateには、私が渡した私の元の論理値が含まれますか?ブール値を保存したければ、OnSaveInstanceStateに保存する必要があると思いますか?アクティビティが停止した場合、getIntent()に渡される内容が再作成されます。

答えて

2

後者は一部ではないので、私は(ドキュメントから)このような理由のために、onPauseで永続的なデータを保存することが重要であること

注()onSaveInstanceState(バンドル)の代わりに をonPause()を使用します ライフサイクルコールバックのうち、そのドキュメントに記載されている などのあらゆる状況で呼び出されることはありません。

次に、再度onCreate()にお読みください。データベースや他のいくつかのリソースから、あなたはそれを保存

をですから、永続的な状態のため..あなたが望む省メカニズムを使用する方法の重要なブール値であることに依存:http://developer.android.com/reference/android/app/Activity.html#SavingPersistentState

そして、このような単純なテキストなどのUI状態のためにここで説明するように、選択はonSaveInstanceStateを使用します。要約としてSaving Android Activity state using Save Instance State

をプロセスは、ブール値を殺したとき=を保存していない場合を行っ:)

+0

が完璧です。サマリーとして、まさに私が探していたものです。私は実際にブール値を消して、onCreateがどこから呼び出されているかを追跡できるようにしたい。 – jsb

1

馬あなたの場合、onPause()と一緒に行なわなければなりません。

事実onSaveInstanceState(バンドルバンドル)は、現在のインスタンスに状態を保存するように設計されています。だからあなたのアプリが殺されたときに、保存されたバンドルがあまりにも

あなたのブール値を保存するためにSharedPreferencesを使用することができます。

SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context); 
sharedPreferences.edit().putBoolean("hiBoolean", booleanValue).commit(); 

そして、あなたのonCreateでそれを取得:

実際
Boolean hiBoolean = sharedPreferences.getBoolean("hiBoolean", true); 
+0

これは正しくない。アプリケーションをホストしているプロセスが終了すると、「インスタンスインスタンスのバンドルを保存」がActivityManagerによって保持され、ユーザーがアプリケーションにナビゲートしたときに返されます。 Androidはプロセスを作成し、アプリケーションをインスタンス化し、スタックの上にあったアクティビティを作成し、最後に保存されたインスタンスの状態バンドルを渡します。以前はこのバンドルはデバイスの再起動時に保存できませんでしたが、Androidは日々驚くばかりで、レベル21のsdkを起動すると、バンドルは再起動後も保持されます。 –

3

、ときあなたの活動オリジナルのインテントが引き続き使用されます。 getIntent()は、最初に作成されたのと同じ意図を返します。ただし、アクティビティの再作成時に保持したい他のデータがある場合は、saveInstanceState()を使用して保存する必要があります。これは、同じ意図で破棄され再作成されるため、アクティビティを実行してデバイスを回転させるだけで確認できます。詳細については、hereを参照してください。