为什么永远不会调用onRestoreInstanceState()

mic*_*ael 36 android

我试图在我的活动中保存数据而不是恢复它.我保存数据onSaveInstanceState()然后我尝试恢复数据onRestoreInstanceState().

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

这是我的步骤:

  1. 开始我的Activity.
  2. 按手机上的"主页"按钮.onSaveInstanceState()被叫.
  3. 单击启动器中的图标并Activity再次启动我.

这时,只能onRestart()打电话.但不是onRestoreInstanceState() 或onCreate().

有谁知道为什么?

Gor*_*ail 17

来自doc:

仅当存在要还原的已保存状态时,系统才会调用onRestoreInstanceState().

  • 如果onRestoreInstanceState()不会被调用,为什么要调用onSaveInstanceState()?这很疯狂.如果我切换到另一个活动,被调用的onSaveInstanceState()让我认为当我回来时我将能够访问已保存的实例状态.但它永远不会遇到任何restore/onCreate函数,因为它正在重新启动.它在文档中也很难解释. (6认同)

cha*_*nya 14

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

onCreate()只有当你Activity的onStop()被调用并且进程被终止时才调用方法.

请参阅Activity生命周期 Android活动生命周期以获得清晰的理解.

您可能想要检查onStop()方法是否被调用以及您的进程是否被终止.我不认为您的过程会被您描述的场景杀死.

这个onRestoreInstanceState()方法很棘手.我不知道它究竟何时被调用,但我看到它在从Potrait变为Landscape时被调用了一次.

  • 你的答案不准确或者至少不清楚,因为在onStop()之后要么调用onRestart(),要么调用onDestroy().如果调用了onDestroy(),那么你将回到onCreate() (3认同)

Ste*_*teD 6

我早些时候在这里问过类似的问题

以下是测试的一些步骤onRestoreInstanceState():

  1. 按主屏幕
  2. 通过adb杀死应用
  3. 再次启动您的应用