首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >onSaveInstanceState ()和onRestoreInstanceState ()

onSaveInstanceState ()和onRestoreInstanceState ()
EN

Stack Overflow用户
提问于 2010-11-04 19:29:06
回答 13查看 172.7K关注 0票数 140

我正在尝试使用onSaveInstanceState()onRestoreInstanceState()方法保存和恢复Activity的状态。

问题是它永远不会进入onRestoreInstanceState()方法。有人能给我解释一下为什么会这样吗?

EN

回答 13

Stack Overflow用户

发布于 2010-11-05 05:18:33

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

使用put方法在onSaveInstanceState()中存储值

代码语言:javascript
复制
protected void onSaveInstanceState(Bundle icicle) {
  super.onSaveInstanceState(icicle);
  icicle.putLong("param", value);
}

并恢复onCreate()中的值

代码语言:javascript
复制
public void onCreate(Bundle icicle) {
  if (icicle != null){
    value = icicle.getLong("param");
  }
}
票数 193
EN

Stack Overflow用户

发布于 2011-07-17 17:05:51

仅当onRestoreInstanceState()被操作系统用杀死后重新创建活动时,才会调用onRestoreInstanceState()。这种情况在以下情况下发生:

设备的

  • 方向发生变化(例如,您的活动被销毁,recreated).
  • there是您面前的另一个活动,并且在某些情况下,操作系统为了释放内存而终止您的活动)。下次启动活动时,将调用onRestoreInstanceState()。

相反:如果你在你的活动中,你点击了设备上的Back按钮,你的活动是finish()(例如,把它想象成退出桌面应用程序),下一次你启动你的应用程序时,它是“新的”启动的,也就是没有保存状态,因为你在点击Back时故意退出了它。

造成混淆的另一个原因是,当一个应用程序将焦点转移到另一个应用程序时,onSaveInstanceState()会被调用,但是当你导航回到你的应用程序时,onRestoreInstanceState()可能不会被调用。这就是原始问题中描述的情况,即如果您的activity在其他activity处于领先状态时未被终止,则不会调用onRestoreInstanceState(),因为您的activity几乎是“活动的”。

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

大多数实现都会简单地使用onCreate(

)来恢复它们的状态,但有时在所有初始化完成之后,或者为了让子类决定是否使用默认实现,在这里这样做是很方便的。此方法的默认实现执行先前被onSaveInstanceState冻结的任何视图状态的还原。

正如我所读到的:没有理由覆盖onRestoreInstanceState(),除非您是在对Activity进行子类化,并且预计会有人对您的子类进行子类化。

票数 152
EN

Stack Overflow用户

发布于 2010-11-04 19:41:05

稍后在onCreate()方法调用时可以使用您在onSaveInstanceState()中保存的状态。因此可以使用onCreate (及其Bundle参数)来恢复活动状态。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4096169

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档