防止Android的碎片恢复(Prevent Fragment recovery in Androi

2019-07-22 02:05发布

我们使用的片段,我们也不需要他们时,活动重新创建自动恢复。 但是Android每当一次Activity::onCreate(Bundle savedInstanceState) - > super.onCreate(savedInstanceState)被调用,即使我们使用的那些片段setRetainInstance(假)恢复片段。

此外,在那些Fragments Fragment.performCreateView()被直接调用,而无需通过去Fragment::onAttach()等。 另外,一些字段的恢复内部空Fragment ...

有谁知道如何防止从Android的碎片恢复?

PS我们知道,在重建的配置活动的情况下改变它才能被加入到表现出一种做ndroid:configChanges="orientation|screenSize|screenLayout但有关自动记忆洗涤的情况下重新创建活动是什么?

Answer 1:

我们完成了加入到活动:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(null);
}

它抑制任何保存在一个活动的创建/重建周期的数据,避免了碎片自动重新创建。



Answer 2:

@goRGon的回答对我来说非常有用,但这种使用会造成严重问题时,有一些你需要重新创建后转发给你的活动的更多信息。

下面是改进版,只有消除“记忆碎片”,但保留所有其他参数。

是从包中移除ID是部分android.support.v4.app.FragmentActivity类作为FRAGMENTS_TAG字段。 它可以随时间变化的过程,但它不是预期。

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(createBundleNoFragmentRestore(savedInstanceState));
}

/**
 * Improve bundle to prevent restoring of fragments.
 * @param bundle bundle container
 * @return improved bundle with removed "fragments parcelable"
 */
private static Bundle createBundleNoFragmentRestore(Bundle bundle) {
    if (bundle != null) {
        bundle.remove("android:support:fragments");
    }
    return bundle;
}


Answer 3:

那些谁与ViewPager了NPE在使用时在接受的答案描述这个方法,请重写

ViewPager.onRestoreInstanceState(Parcelable state)

方法和呼叫

super.onRestoreInstanceState(null);

代替。



Answer 4:

我删除了活动的onCreate的片段。



Answer 5:

我也有一个ViewPager所以我检查了fragmentMananger如果它有它的片段,并删除他们onCreate()

例如使用这个线程: 从容器中取出所有碎片 。

FragmentManager fm = getSupportFragmentManager();
for (Fragment fragment: fm.getFragments()) {
  fm.beginTransaction().remove(fragment).commitNow();
}

commitNow()到synchronosly除去碎片。



Answer 6:

我有一个问题TransactionTooLargeException 。 因此,使用后令人欣慰的tolargetool我创办的片段(机器人:支持:片段)是一直在内存中,交易变得过大。 所以,最后我做到这一点,这真是棒极了。

@Override
public void onSaveInstanceState(final Bundle outState) {
    super.onSaveInstanceState(outState);
    outState.putSerializable("android:support:fragments", null);
}


Answer 7:

查看层次结构不会自动恢复。 所以,在Fragment.onCreateView()Activity.onCreate()你必须恢复所有视图(从XML或以编程方式)。 包含片段每个ViewGroup中,当你创建它的第一次必须具有相同的ID。 一旦视图层次被创建,Android的恢复所有碎片,并把他们的意见的权利的ViewGroup感谢ID英寸 让说,Android的记得一个ViewGroup上一个片段的ID。 出现这种情况介于onCreateView()onStart()



文章来源: Prevent Fragment recovery in Android