【问题标题】:onRestoreInstanceState() not being called when it is expectedonRestoreInstanceState() 在预期的时候没有被调用
【发布时间】:2010-06-27 19:10:31
【问题描述】:

我最近在使用onSaveInstanceState()onRestoreInstanceState() 时遇到了一些麻烦。我有多个活动使用这些方法来保存状态,以防它们被系统清理。他们中的大多数都可以工作,除了一个,我不知道为什么。

具体情况是这样的:

  • 我的模拟器正在运行,并且开发工具设置为destroy() 所有活动,当它们不再可见时。 (这样我就可以证明保存/恢复工作正常。)
  • 有问题的 Activity 已启动,我继续更改它的一些状态。
  • 我开始一个新的活动,让它运行一会儿,然后使用“返回”按钮转到我以前的活动。
  • 回到有问题的 Activity 后,我注意到默认状态已返回,因此它没有应有的状态。

我注意到onSaveInstanceState() 被调用,onCreate() 被调用,但有一个空包,onRestoreInstanceState() 从未被调用。

有人见过吗?

【问题讨论】:

标签: android


【解决方案1】:

我相信我已经弄清楚了这个问题,而且我在最初的问题中没有透露细节。

我保存在我的捆绑包中的其中一个东西非常大(500x1000 像素的位图)。当我从我的 Bundle 中删除它时,其他所有内容都已保存,使用 Bundle 调用了 onCreate() 方法,并且还调用了 onRestoreInstanceState()。

因此,我相信有一个最大大小的 Bundle 可以保存在 onSaveInstanceState() 中,这没有记录在案。 (至少据我所知)

【讨论】:

    【解决方案2】:

    您使用的开发工具设置可能没有您期望的行为。

    如果你想测试onSaveInstanceState()/onRestoreInstanceState(),最简单的方法就是改变方向(<Ctrl>-<F11>)。默认情况下,您的活动被销毁并使用实例状态重新创建。

    【讨论】:

    • 感谢您的回答。我没有提到的是,我在 Manifest 中使用以下属性锁定了这个 Activity: android:configChanges="keyboardHidden|orientation" android:screenOrientation="portrait"
    • 我尝试改变方向,这确实称为onRestoreInstanceState() 方法。但是我没有在这个方法中恢复变量,而且我的 EditText 之前输入了值,而不是什么都没有。你能解释一下吗?
    • @Akash:onSaveInstanceState()onRestoreInstanceState() 的内置实现可以处理用户可变的小部件状态,例如 EditText 中的文本。
    • @CommonsWare 好的。那么为什么我们需要在 SDK 处理这些方法时重写这些方法呢?
    • @Akash:如果您的 other 状态在内置 @987654328 的某些内容中 not 表示,您只需要覆盖这些方法@ 将处理。例如,并非活动中的所有内容都必须是 EditText 中的文本。
    【解决方案3】:

    onRestoreInstanceState() 没有被调用(或者更确切地说:当它被调用时)的解释在另一个问题的线程中给出:onSaveInstanceState () and onRestoreInstanceState ()

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多