Android 在需要时未调用onRestoreInstanceState()

Android 在需要时未调用onRestoreInstanceState(),android,Android,我最近在使用onSaveInstanceState()和onRestoreInstanceState()时遇到了一些问题。我有多个活动使用这些方法保存状态,以防系统清理它们。除了一个,大多数都能工作,我不知道为什么 具体情况如下: 我的模拟器正在运行,开发工具设置为destroy()所有不再可见的活动。(这样我就可以证明保存/恢复工作正常。) 正在讨论的活动已启动,我将继续更改它的一些状态 我开始一个新的活动,让它运行一会儿,然后使用“后退”按钮转到我以前的活动 回到讨论中的活动时,我注意到默

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

具体情况如下:

  • 我的模拟器正在运行,开发工具设置为
    destroy()
    所有不再可见的活动。(这样我就可以证明保存/恢复工作正常。)
  • 正在讨论的活动已启动,我将继续更改它的一些状态
  • 我开始一个新的活动,让它运行一会儿,然后使用“后退”按钮转到我以前的活动
  • 回到讨论中的活动时,我注意到默认状态是back,因此,它没有它应该具有的状态
我注意到调用了
onSaveInstanceState()
,调用了
onCreate()
,但有一个空包,并且从未调用过
onRestoreInstanceState()


以前有人见过吗?

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


如果要在saveInstanceState()上测试
/
onRestoreInstanceState()
,最简单的方法是更改方向(
-
)。默认情况下,您的活动将被销毁并使用实例状态重新创建。

我相信我已经解决了这个问题,我在最初的问题中没有透露细节

我在包中保存的东西之一是相当大的(一个500x1000像素的位图)。当我从包中删除它时,其他所有内容都保存了下来,包中调用了onCreate()方法,还调用了onRestoreInstanceState()


因此,我相信您可以在onSaveInstanceState()中保存一个最大大小的捆绑包,这是没有文档记录的。(至少就我所知)

另一个问题的线索中给出了为什么没有调用
onrestoreinnstancestate()
(或者更具体地说:调用时)的解释:

谢谢你的回答。我没有提到的是,我在清单中用以下属性锁定了此活动:android:configChanges=“keyboardHidden | orientation”android:screenOrientation=“肖像”我尝试更改方向,并调用了
onrestoreinstate()
方法。但我并没有在这个方法中恢复变量,而且我的EditText以前也输入了值,而不是什么都并没有。你能解释一下吗?@Akash:onSaveInstanceState()和onRestoreInstanceState()有一个内置的实现,可以处理用户易变的小部件状态,比如
EditText
@Commonware Ok中的文本。那么,当SDK处理这些方法时,为什么我们需要重写这些方法呢?@Akash:如果您有其他状态,而这些状态在内置的
onSaveInstanceState()将处理的内容中没有表示,那么您只需要重写这些方法。例如,并非活动中的所有内容都必须是
EditText
中的文本。对不起,我知道这些问题很久以前就存在了,但您是如何保存活动状态的?请你看看我的问题好吗?请查一下我的电话号码。