当期望调用onRestoreInstanceState()方法时未被调用

12

最近我在使用 onSaveInstanceState()onRestoreInstanceState() 时遇到了一些问题。我有多个活动使用这些方法,在系统清理它们的情况下保存状态。其中大部分都能正常工作,但有一个不行,而我也不知道原因。

具体情况如下:

  • 我的模拟器正在运行,并设置开发工具在所有活动不再可见时调用destroy()。 (以此来证明保存/恢复状态是否正常工作)
  • 打开相关的Activity并更改它的一些状态。
  • 启动新活动,让它运行一会儿,然后使用“返回”按钮回到之前的活动。
  • 回到相关的Activity时,我注意到默认状态已经还原,因此它没有应有的状态。

我注意到onSaveInstanceState()被调用,onCreate()被调用,但是Bundle为空, 而 onRestoreInstanceState()从未被调用。

有人见过这种情况吗?


非常抱歉,我知道这个问题很久以前就提出了,但是你是如何保存你的活动状态的?你能否看一下我的问题?http://stackoverflow.com/questions/26142255/retrieve-an-activity-after-time-out-warning-notification - Hamid
请查看我的解决方案,以便进行调用。 - صلي علي محمد - Atef Farouk
3个回答

4
我相信我已经找出了问题所在,它与我在原始问题中没有披露的细节有关。
我的Bundle中保存了一些相当大的东西(一个500x1000像素的位图)。当我从我的Bundle中删除它时,其他所有东西都被保存了。onCreate()方法也接收到了Bundle,并且onRestoreInstanceState()方法也被调用了。
因此,我相信这里存在一个最大的Bundle大小限制,但这并未得到记录。(至少就我所知)

3
您所使用的开发工具设置可能不符合您的预期。
如果您想测试 onSaveInstanceState()/onRestoreInstanceState(),最简单的方法是更改方向(<Ctrl>-<F11>)。默认情况下,您的活动将被销毁并重新创建,使用实例状态。

我尝试改变方向并调用了onRestoreInstanceState()方法。但是我在这个方法中没有恢复变量,但是我的EditText仍然有之前输入的值,而不是没有任何值。你能解释一下吗? - Geek
@Akash:有一个内置的onSaveInstanceState()onRestoreInstanceState()实现,可以处理明显可变用户小部件状态,例如EditText中的文本。 - CommonsWare
@CommonsWare 好的。那么既然这些方法已经被SDK处理了,为什么我们还需要重写它们呢? - Geek
@Akash:只有在存在由内置的onSaveInstanceState()方法处理的内容中,你才需要覆盖这些方法。例如,活动中并非所有内容都是EditText中的文本。 - CommonsWare
@Akash:我不知道,因为我不是这个活动的作者,也不知道期望值是什么。如果您在这方面有进一步的疑虑,请提出一个单独的StackOverflow问题,并完整而准确地解释您想要做什么。 - CommonsWare
显示剩余2条评论

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接