Android会阻止恢复活动

时间:2013-08-06 22:39:50

标签: android

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

此处提议的解决方案https://stackoverflow.com/a/15683289/552735不起作用。它会导致异常 java.lang.IllegalStateException:键f2:index 3

不再存在Fragement

2 个答案:

答案 0 :(得分:12)

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

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

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

答案 1 :(得分:1)

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

@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
    super.onRestoreInstanceState(savedInstanceState);
     startActivity(new Intent(this,YOUR_ACTIVITY.class));
     finish();
}