onSaveInstanceState()
また、Androidは、再作成が必要な場合、通常は構成の変更(向きの変更など)後にonRestoreInstanceState()
のみ明示的に呼び出されます。Activity
これは、の新しいインスタンスを呼び出した場合には適用されませんActivity
。戻るボタンを押すと、アクティビティBが破棄され、次にそれを開始したときに、アクティビティBの新しいインスタンスが作成されますActivity
。
のインスタンスを手動で保存する場合は、Activity
を介してアクティビティBを呼び出しますstartActivityForResult()
。次に、アクティビティBでonDestroy()
メソッドをオーバーライドし、次のコード行を呼び出します。
@Override
protected void onDestroy() {
Bundle savedState = new Bundle();
onSaveInstanceState(savedState);
Intent data = new Intent();
data.putExtra("savedState", savedState);
setResult(RESULT_OK, data);
super.onDestroy();
}
アクティビティAでonActivityResult
、データを上書きして保存します。
Bundle activityBData;
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(resultCode == RESULT_OK) {
activityBData = data.getBundleExtra("saved_state");
}
}
次に、アクティビティBを再開するときは、次のように呼び出します。
Intent intent = new Intent(this, ActivityB.class);
if (activityBData != null) {
intent.putExtra("saved_state", activityBData);
}
startActivityForResult(intent, 0);
最後に、アクティビティBのonCreate
メソッドで、状態を復元します。
if (savedInstanceState == null) {
Intent intent = getIntent();
Bundle savedState = intent.getBundleExtra("saved_state");
onRestoreInstanceState(savedState);
}