我正在尝试使用onSaveInstanceState()和onRestoreInstanceState()方法保存和恢复Activity的状态。
问题是它永远不会进入onRestoreInstanceState()方法。有人能给我解释一下为什么会这样吗?
发布于 2010-11-05 05:18:33
通常您可以在onCreate()中恢复您的状态。也可以在onRestoreInstanceState()中恢复它,但不是很常见。(onRestoreInstanceState()在onStart()之后调用,而onCreate()在onStart()之前调用。
使用put方法在onSaveInstanceState()中存储值
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");
}
}发布于 2011-07-17 17:05:51
仅当onRestoreInstanceState()被操作系统用杀死后重新创建活动时,才会调用onRestoreInstanceState()。这种情况在以下情况下发生:
设备的
相反:如果你在你的活动中,你点击了设备上的Back按钮,你的活动是finish()(例如,把它想象成退出桌面应用程序),下一次你启动你的应用程序时,它是“新的”启动的,也就是没有保存状态,因为你在点击Back时故意退出了它。
造成混淆的另一个原因是,当一个应用程序将焦点转移到另一个应用程序时,onSaveInstanceState()会被调用,但是当你导航回到你的应用程序时,onRestoreInstanceState()可能不会被调用。这就是原始问题中描述的情况,即如果您的activity在其他activity处于领先状态时未被终止,则不会调用onRestoreInstanceState(),因为您的activity几乎是“活动的”。
总而言之,正如onRestoreInstanceState()文档中所述
大多数实现都会简单地使用onCreate(
)来恢复它们的状态,但有时在所有初始化完成之后,或者为了让子类决定是否使用默认实现,在这里这样做是很方便的。此方法的默认实现执行先前被onSaveInstanceState冻结的任何视图状态的还原。
正如我所读到的:没有理由覆盖onRestoreInstanceState(),除非您是在对Activity进行子类化,并且预计会有人对您的子类进行子类化。
发布于 2010-11-04 19:41:05
稍后在onCreate()方法调用时可以使用您在onSaveInstanceState()中保存的状态。因此可以使用onCreate (及其Bundle参数)来恢复活动状态。
https://stackoverflow.com/questions/4096169
复制相似问题