onSaveInstanceState() 和 onRestoreInstanceState() 仅在需要重新创建 Activity 时由 Android 显式调用,通常是在配置更改(例如更改方向)之后。这不包括调用Activity 的新实例时的情况。当您按下后退按钮时,Activity B 被销毁,并且您将在下次启动 Activity 时创建它的新实例。
如果您想手动保存Activity 的实例,请通过startActivityForResult() 调用活动B。然后,在 Activity 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");
}
}
然后,当再次启动 Activity B 时,这样调用它:
Intent intent = new Intent(this, ActivityB.class);
if (activityBData != null) {
intent.putExtra("saved_state", activityBData);
}
startActivityForResult(intent, 0);
最后,在 Activity B 的onCreate 方法中,恢复状态:
if (savedInstanceState == null) {
Intent intent = getIntent();
Bundle savedState = intent.getBundleExtra("saved_state");
onRestoreInstanceState(savedState);
}