7

我有一个查看器,里面有很多片段。当活动被发送到后台并且需要资源时,操作系统将杀死应用程序或至少一些片段。当我返回活动时,它崩溃了,因为活动试图附加它在清理之前持有的所有片段的新实例,现在一些字段为空。这当然可以通过使用 Bundles 正确实现状态保存和恢复来解决,但我不想这样做。相反,我想防止恢复碎片。有没有办法告诉操作系统,一旦它发送了 GC 并销毁了碎片,它就不应该费心重新创建它们?清理完成后,我希望在返回时简单地重新创建活动,就好像用户通过点击图标启动它一样。有机会这样做吗?

此处建议的解决方案https://stackoverflow.com/a/15683289/552735不起作用。它会导致异常 java.lang.IllegalStateException: Fragment no longer exist for key f2: index 3

4

2 回答 2

14

我遇到了这样的问题。这是我修复它的方法:

    @Override 
    protected void onSaveInstanceState(Bundle savedInstanceState)
    {
        savedInstanceState.clear();
    }

请注意,此方法将确保在 Activity 被系统杀死时绝对不会存储任何 UI 状态信息 - 这也具有在onRestoreInstanceState()使用相同的 Bundle 调用后不恢复任何视图的效果onStart()

于 2014-01-12T06:23:28.360 回答
1

您不能禁用保存/恢复实例状态操作。如果您不想实际实现此逻辑,则必须重新加载表单,尤其是当您的表单大量加载片段时。

@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
    super.onRestoreInstanceState(savedInstanceState);
     startActivity(new Intent(this,YOUR_ACTIVITY.class));
     finish();
}
于 2017-06-04T11:14:40.843 回答