仅在屏幕旋转的情况下才调用onRestoreInstanceState()吗?

时间:2013-07-09 07:39:50

标签: android activity-lifecycle

我对Android中的Activity Lifecycle有疑问。 我想知道,在什么情况下调用onRestoreInstanceState()方法?

文档说

  

“仅当存储已保存时,系统才会调用onRestoreInstanceState()   恢复状态“

但我想知道这种情况何时会发生。它是否仅适用于屏幕旋转,前景活动被销毁和重新创建时?

1 个答案:

答案 0 :(得分:4)

从链接here

只有在操作系统终止后重新创建活动时,

onRestoreInstanceState()才会被称为。这种情况发生在:

  • 设备的方向发生变化(您的活动被破坏并重新创建)
  • 在你面前还有另一项活动,在某些时候,操作系统会杀死你的活动以释放内存(例如)。下次开始您的活动时,将调用onRestoreInstanceState()

相反:如果您正在进行活动,并且您点击设备上的Back按钮,则您的活动已完成()编辑(即将其视为退出桌面应用程序),下次启动应用时开始“新鲜”,即没有保存状态,因为当你点击Back时你有意退出它。

其他混淆原因是当应用程序失去焦点时,另一个应用程序onSaveInstanceState()会被调用,但当您导航回应用程序onRestoreInstanceState()时,可能无法调用该应用程序onRestoreInstanceState()。这是原始问题中描述的情况,即如果您的活动未在其他活动在前面onRestoreInstanceState()期间被杀死,则不会被调用,因为您的活动几乎“活着”。

总而言之,正如onRestoreInstanceState()的文档中所述:

  

大多数实现只会使用onCreate(Bundle)来恢复它们   状态,但有时候在这里做完之后很方便   初始化已完成或允许子类决定是否   使用您的默认实现。这个的默认实现   方法执行以前任何视图状态的恢复   由onSaveInstanceState(Bundle)冻结。

正如我所读到的:没有理由覆盖Activity,除非你是onCreate()的子类,并且预计会有人将你的子类子类化。

不仅如此,还包括:

通常您会在onRestoreInstanceState()中恢复您的状态。也可以在onRestoreInstanceState()中恢复它,但不是很常见。 (onStart()之后调用onCreate(),而onStart()之前调用onSaveInstanceState()

使用put方法在protected void onSaveInstanceState(Bundle icicle) { super.onSaveInstanceState(icicle); icicle.putLong("param", value); }

中存储值
onCreate()

恢复public void onCreate(Bundle icicle) { if (icicle != null){ value = icicle.getLong("param"); } } 中的值:

{{1}}

您不必存储视图状态,因为它们是自动存储的。