2011-04-07 111 views
26

我试图将数据保存在我的活动中并进行恢复。 我将数据保存在onSaveInstanceState()上,然后尝试恢复onRestoreInstanceState()中的数据。为什么onRestoreInstanceState()永远不会被调用

我设置了断点,方法onSaveInstanceState()被调用。但onRestoreInstanceState()onCreate()从来没有。

这里是我的步骤:

  1. 开始我Activity
  2. 按手机上的'Home'按钮。打电话给onSaveInstanceState()
  3. 单击启动器中的图标并再次启动我的Activity

此时,只有onRestart()被调用。但不是onRestoreInstanceState()onCreate()

有谁知道为什么吗?

回答

9

那么,如果调用onRestart(),实例变量的值将由应用程序堆栈本身维护,因此您不需要恢复它们。

onCreate()方法仅在您的ActivityonStop()被调用并且进程被终止时调用。

请参考Activity生命周期Android Activity Life Cycle了解清楚。

您可能想要检查onStop()方法是否被调用,并且您的进程是否被终止。我不认为你的程序会被你描述的情况所杀。

onRestoreInstanceState()方法非常棘手。我不知道它是什么时候被调用的,但是我看到它在从Potrait转换到Landscape时被调用了一次。

+0

http://stackoverflow.com/questions/4967435/onrestoreinstancestate-not-called-when-screen-wake-up - 有一个答案是什么onRestoreInstanceState是。 – jellyfish 2011-05-13 14:37:10

+3

你的回答不完全准确,或者至少不清楚,因为在onStop()之后要么调用onRestart(),要么调用onDestroy()。如果onDestroy()被调用,那么你回到onCreate() – LuxuryMode 2012-01-11 19:28:18

+0

谢谢。 onRestore ...在方向改变时似乎被调用。简化的东西对我来说没有结束(+: – Everyone 2012-11-09 18:08:38

5

我问similiar问题早在here

这里有一些步骤来测试onRestoreInstanceState()

  1. 按下主屏幕
  2. 亚行
  3. 终止该应用重新启动您的应用程序
+0

感谢一个好的技巧,以检查此 – 2016-01-28 08:00:06

11

doc:

系统调用onRestoreInstanceState()只如果有恢复已保存的状态。

+2

为什么会的onSaveInstanceState()被调用,如果onRestoreInstanceState()是不会永远被称为 这太疯狂了。? 。如果我切换到另一个活动,被调用的onSaveInstanceState()让我认为当我回来时我可以访问已保存的实例状态,但它从不会触及任何restore/onCreate函数,因为它正在重新启动。也在文档中解释。 – 2017-06-21 00:06:36

3

按照以下步骤(使用过Android Studio):

  1. 新建logcat的过滤器,例如AppState
  2. 在模拟器上启动应用程序。你会看到:

    I /届时AppState:的onCreate

    I /届时AppState:在onStart

    I /届时AppState:的onResume

  3. 按CTL-F12旋转模拟器。你会看到:

    I/StateChange:在onPause

    I/StateChange:的onSaveInstanceState

    I/StateChange:的onStop

    I/StateChange:的onDestroy

    I/StateChange:的onCreate

    I/StateChange:onStart

    I/StateChange:onRestoreInstanceState

    I/StateChange:的onResume

这通过使配置更改设备,诸如从纵向旋转到横向导致活性的破坏和娱乐。

相关问题