我对Android中的Activity Lifecycle有疑问。 我想知道,在什么情况下调用onRestoreInstanceState()方法?
文档说
“仅当存储已保存时,系统才会调用onRestoreInstanceState() 恢复状态“
但我想知道这种情况何时会发生。它是否仅适用于屏幕旋转,前景活动被销毁和重新创建时?
答案 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}}
您不必存储视图状态,因为它们是自动存储的。