Bla*_*BRA 136 android states android-activity
我正在尝试保存和恢复Activity
使用方法onSaveInstanceState()
和状态onRestoreInstanceState()
.
问题是它永远不会进入onRestoreInstanceState()
方法.任何人都可以向我解释为什么会这样吗?
Rob*_*ert 189
通常你恢复你的状态onCreate()
.它也可以恢复onRestoreInstanceState()
,但不是很常见.(onRestoreInstanceState()
被称为后onStart()
而,onCreate()
之前被调用onStart()
.
使用put方法将值存储在onSaveInstanceState()
:
protected void onSaveInstanceState(Bundle icicle) {
super.onSaveInstanceState(icicle);
icicle.putLong("param", value);
}
Run Code Online (Sandbox Code Playgroud)
并恢复以下值onCreate()
:
public void onCreate(Bundle icicle) {
if (icicle != null){
value = icicle.getLong("param");
}
}
Run Code Online (Sandbox Code Playgroud)
您不必存储视图状态,因为它们是通过调用super.onSaveInstanceState(icicle); 自动存储的.
Ogn*_*yan 147
onRestoreInstanceState()
只有在被操作系统杀死后重新创建活动时才会调用它.这种情况发生在:
onRestoreInstanceState()
将被调用.相反:如果您正在进行活动并且Back
按下设备上的按钮,则您的活动将完成()编辑(即将其视为退出桌面应用程序),下次启动应用程序时,它将以"新鲜"开始,即没有保存状态,因为你在击中时故意退出Back
.
其他混淆的原因是当一个应用程序失去焦点到另一个应用程序onSaveInstanceState()
被调用时,但当你导航回你的应用程序时onRestoreInstanceState()
可能不会被调用.这是原始问题中描述的情况,即如果您的活动在其他活动在前面的期间未被杀死onRestoreInstanceState()
将不会被调用,因为您的活动几乎"活着".
总而言之,正如文档中所述onRestoreInstanceState()
:
大多数实现只是使用onCreate(Bundle)来恢复它们的状态,但是在完成所有初始化之后有时可以方便地执行此操作,或者允许子类决定是否使用默认实现.此方法的默认实现执行先前已被onSaveInstanceState(Bundle)冻结的任何视图状态的恢复.
当我读到它时:没有理由覆盖onRestoreInstanceState()
除非你是子类Activity
,并且预计有人将子类化.
您保存的状态onSaveInstanceState()
稍后在onCreate()
方法调用时可用.因此,使用onCreate
(及其Bundle
参数)来恢复活动的状态.
从文档使用保存的实例状态恢复活动 UI 状态,它被描述为:
您可以选择实现 onRestoreInstanceState(),而不是在 onCreate() 期间恢复状态,系统会在 onStart() 方法之后调用该方法。仅当有保存的状态需要恢复时,系统才会调用 onRestoreInstanceState() ,因此您不需要检查 Bundle 是否为 null:
IMO,这比在 onCreate 中检查这一点更清晰,并且更符合单一责任原则。
归档时间: |
|
查看次数: |
160284 次 |
最近记录: |