SavedInstanceState始终为null,即使它具有标识

时间:2016-02-29 21:26:28

标签: android android-activity android-savedstate

我找到了很多这个问题的答案,但似乎都没有。这是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捆绑为空

2 个答案:

答案 0 :(得分:1)

来自activity lifecycle的文档:

  

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

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

此外,我建议您恢复不在onCreate()但在onRestoreInstanceState(Bundle savedInstanceState)中的状态,在该状态下,您始终确定savedInstanceState Bundle不是python python_code.py && echo "script exited successfully" || echo "there was an error." 空。

答案 1 :(得分:0)

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

将您的活动启动模式设置为singleTop,以实现正义 link