SavedInstanceState 始终为空,即使它有一个 id

SavedInstanceState is always null even though it has an id

我找到了这个问题的许多答案,但其中 none 似乎有效。这是 Activity:

中的代码
@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
    // Save the user's current game state
    savedInstanceState.putString(CUR_TASK, curTask);

    // Always call the superclass so it can save the view hierarchy state
    super.onSaveInstanceState(savedInstanceState);
}

如您所见,super.onSaveInstanceState(savedInstanceState) 在末尾,因此应该可以。我的布局确实有一个 id,所以它也应该没问题:

<android.support.v4.widget.DrawerLayout
    android:id="@+id/drawer_layout"

仍然,当我调用 startActivity 去另一个 Activity 和 return 返回(使用 ActionBar)时,savedInstanceState 包在 onCreate 为空。

如果当您将应用程序置于后台并返回时,onCreate 中的实例状态不为空,我的猜测是,当您从返回堆栈返回 activity 时,它会被重新创建。

将您的 Activity 启动模式设置为 singleTop 以获得更好的公正性 link

来自 activity lifecycle 上的文档:

Note: Because onSaveInstanceState() is not guaranteed to be called, you should use it only to record the transient state of the activity (the state of the UI)—you should never use it to store persistent data. Instead, you should use onPause() to store persistent data (such as data that should be saved to a database) when the user leaves the activity.

方法onSaveInstanceState不用于您的目的,它用于屏幕旋转等情况下以保存UI状态。 当第一个 Activity 启动第二个并使用 onActivityResult().

再次传回值时,您必须切换通过意图传递值的逻辑

此外,我建议您不在 onCreate() 中恢复您的状态,而是在 onRestoreInstanceState(Bundle savedInstanceState) 中恢复您始终确定您的 savedInstanceState Bundle 不是空。