1

我找到了很多关于这个问题的答案,但似乎没有一个有效。这是中的代码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并返回时(使用ActionBar),savedInstanceState捆绑包onCreate为空。

4

2 回答 2

1

从有关活动生命周期的文档中:

注意:因为不能保证调用 onSaveInstanceState(),所以你应该只使用它来记录活动的瞬态状态(UI 的状态)——你不应该使用它来存储持久数据。相反,当用户离开活动时,您应该使用 onPause() 来存储持久数据(例如应该保存到数据库中的数据)。

该方法onSaveInstanceState不用于您的目的,它用于屏幕旋转等情况以保存 UI 状态。Activity当第一个启动第二个时,您必须切换逻辑通过意图传递值并使用onActivityResult().

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

于 2016-02-29T21:46:09.217 回答
0

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

将您的活动启动模式设置为 singleTop 以获得伟大的正义 链接

于 2016-02-29T21:38:28.483 回答