【问题标题】:SavedInstantState created during onSaveInstanceState not restored in onCreate在 onSaveInstanceState 期间创建的 SavedInstantState 未在 onCreate 中恢复
【发布时间】:2012-09-06 00:17:54
【问题描述】:

我的应用是一个 Activity(它现在是 FragmentActivity 的一个子类,虽然我认为这并不重要),我们称之为 Activity A。

在其中,一个按钮通过 Intent 使用 startActivity() 启动它,从而导航到(比如说)Activity B。

清单中的活动都没有任何特殊标志(SingleTop)等,没有调用完成()等。即没有什么不寻常的。

Activity A 的方法 onSaveInstanceState() 被调用,我保存了一些状态信息。

在活动 B 中,我按 BACK 键并返回到活动 A。

调用了onCreate()方法,但是“savedInstanceState”的Bundle为空,无法重建之前保存的状态。

任何想法我做错了什么,以及如何确保我恢复状态。

顺便说一句:在配置更改(比如旋转)时,一切正常......

【问题讨论】:

  • 启动 Activity B 并返回到 Activity A 应该只调用 Activity A 的 onPause()onResume() 方法。你之前的状态不应该被改变......除非操作系统在后台杀死 A 以回收内存,但这与方向改变没有什么不同。

标签: android android-activity


【解决方案1】:

当您通过按返回键返回活动 A 时,onCreate() 被调用似乎很奇怪。一般来说,它应该只显示现有活动而不尝试重新创建它。我还认为,当您开始其他活动时,onSaveInstanceState() 被调用也很奇怪。事实上,文档指出它可能不会在启动 Activity B 时调用 onSaveInstanceState()

一个例子:当 onPause() 被调用而不是 onSaveInstanceState(Bundle) 是活动 B 在前面启动的时候 活动 A:系统可能会避免调用 onSaveInstanceState(Bundle) 如果它在 B 的生命周期内没有被杀死,则在活动 A 上,因为 A 的用户界面的状态将保持不变。

来自here

我认为还有其他事情正在发生。

【讨论】:

  • 是的,我也无法理解 onCreate() 再次被调用并且您确认了它....所以我调查了....结果,我不知道的是,活动B 正在捕获 BACK 键并启动 Activity A 的新实例(关于它为什么这样做的故事很长......)。已修复,谢谢
【解决方案2】:

Activity A 从未被销毁,因此不应调用 onCreate()。可以放一些代码吗?

【讨论】:

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