理解できなかったので申し訳ありませんが、Android開発で新しいです。
アクティビティAとアクティビティBを含むアプリケーションがあり、アクティビティAからアクティビティBに移動します。アクティビティAを離れると、onSaveInstanceState
メソッドが呼び出されましたが、アクティビティAに戻ると(同じアプリケーションのアクティビティB)、onCreate
メソッドのバンドルはnullでした。
アクティビティAの以前の状態を保存するにはどうすればよいですか?アプリケーションの有効期間中のみデータを保存します。
誰かがこれで私を助けることができますか?
アクティビティAのコードは次のとおりです。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (savedInstanceState != null)
{
Log.v("Main", savedInstanceState.getString("test"));
}
else
{
Log.v("Main", "old instance");
}
}
@Override
public void onSaveInstanceState(Bundle savedInstanceState)
{
Log.v("Main", "save instance");
savedInstanceState.putString("test", "my test string");
super.onSaveInstanceState(savedInstanceState);
}
public void buttonClick(View view)
{
Intent intent = new Intent(this, Activity2.class);
startActivity(intent);
}
ボタンを押してアクティビティAに戻るときのアクティビティBのコードを次に示します。
public void onBack(View view)
{
NavUtils.navigateUpFromSameTask(this);
}
状態の保存と復元は、ユーザーがアプリケーションを終了したときに使用されなくなった現在の一時データを保存することを目的としています。次のアクティビティを開いてアクティビティを最小化または終了すると、リソースの不足によりシステムによって強制終了され、戻ったときにsavedInstanceState
で再起動される場合があります。したがって、onSaveInstanceState()
は、最小化復元セッションデータの保存にのみ使用してください。
したがって、前に新しいアクティビティを開始し、前のアクティビティに戻ろうとすると(実行しようとしていること)、アクティビティAは削除されずに(停止するだけで)再起動される可能性があります。開発者向けのオプションメニューで_Don't keep activities
_をチェックすると、強制的に強制終了して復元できます。
finish()
を呼び出すか、最近のタスクリストからActivity
を削除すると、タスクがクリアされたため、savedInstanceState
はonCreate()
に渡されません。
値を永続化する必要がある場合は、_SharedPreferences.
_の使用を検討してください
あなたの質問に答えるには、Android doc: https://developer.Android.com/reference/Android/app/Activity.html#onRestoreInstanceState(Android。 os.Bundle)
OnRestoreInstanceStateは、アクティビティライフサイクルのonStart()メソッドの後に呼び出されると書かれています。
これは、あなたが難しい道を進んでいるからです。電話機のデフォルトの戻るボタンナビゲーションを使用した場合、onCreate
にバンドルが渡されます。
この問題を回避するには、状態を共有設定とバックアップに保存することをお勧めします。バンドルがヌルの場合、共有設定から復元します。
OnCreate()の後のonStart()の後
この場合、フラグとSharedPreferencesを使用しました。これは機能し、画面の向きを変更するときに機能します。