为了账号安全,请及时绑定邮箱和手机立即绑定

onSaveInstanceState()和onRestoreInstanceState()

onSaveInstanceState()和onRestoreInstanceState()

慕尼黑8549860 2019-06-25 18:17:55
onSaveInstanceState()和onRestoreInstanceState()我试图保存和恢复Activity使用方法onSaveInstanceState()和onRestoreInstanceState().问题是它从未进入onRestoreInstanceState()方法。有人能解释一下为什么吗?
查看完整描述

3 回答

?
largeQ

TA贡献2039条经验 获得超7个赞

通常你恢复你的状态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");
  }}

您不必存储视图状态,因为它们是存储的。自动通过调用Super.onSaveInstanceState(冰柱);


查看完整回答
反对 回复 2019-06-25
?
浮云间

TA贡献1829条经验 获得超4个赞

onRestoreInstanceState()被称为只有在重新创造的时候之后的活动被杀被操作系统。这种情况发生在下列情况:

  • 设备更改的方向(您的活动被破坏并重新创建)
  • 在您的前面还有另一个活动,操作系统会在某个时候杀死您的活动,以便释放内存(例如)。下次你开始活动的时候

    onRestoreInstanceState()

    会被召唤。

相反,如果你在你的活动中,你击中Back按钮,您的活动将为Finish()ed(即将其视为退出桌面应用程序),下次启动应用程序时将启动“新”,即没有保存状态,因为当您单击时有意退出它。Back.

另一个令人困惑的原因是,当一个应用程序失去对另一个应用的关注时。onSaveInstanceState()调用,但当您导航回应用程序时onRestoreInstanceState()可能不会被召唤。这就是原问题中所描述的情况,即如果你的活动在其他活动之前的时期内没有被杀死的话。onRestoreInstanceState()不会被调用,因为你的活动几乎是“活着”的。

总而言之,如文件所述onRestoreInstanceState():

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

就像我读到的:没有理由重写onRestoreInstanceState()除非你是子类Activity预计会有人对您的子类进行子类分类。


查看完整回答
反对 回复 2019-06-25
?
摇曳的蔷薇

TA贡献1793条经验 获得超6个赞

你存钱的状态onSaveInstanceState()稍后可在onCreate()方法调用。所以使用onCreate(及其Bundle参数)以恢复活动的状态。


查看完整回答
反对 回复 2019-06-25
  • 3 回答
  • 0 关注
  • 648 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信