添加&时出现IllegalStateException替换碎片; commit vs commitAllowingStateLoss

时间:2016-01-05 23:44:57

标签: android exception android-fragments

这种情况很少发生,但偶尔我的应用程序会因添加和替换片段时出现IllegalStateException而崩溃。我是这样做的,我是用动画制作的。

private void addFragmentReplace(int containerId, Fragment fragment) {
    // check if the fragment has been added already
    Fragment temp = mFragmentManager.findFragmentByTag(fragment.getTag());
    if (!Utils.checkIfNull(temp) && temp.isAdded()) {
        return;
    }

    // replace fragment and transition with animation
    mFragmentManager.beginTransaction().setCustomAnimations(R.anim.ui_slide_in_from_bottom_frag,
            R.anim.ui_slide_out_to_bottom_frag).replace(containerId, fragment).addToBackStack(null)
            .commit();
}

我已经研究过将“commit()”更改为“commitAllowingStateLoss()”但这真的是一个解决方案吗?它会阻止崩溃,但是,它不会导致其他冲突,例如片段有时不显示或其他?以下是我上面代码片段的一个奇怪的改进吗?

private void addFragmentReplace(int containerId, Fragment fragment) {
    // check if the fragment has been added already
    Fragment temp = mFragmentManager.findFragmentByTag(fragment.getTag());
    if (!Utils.checkIfNull(temp) && temp.isAdded()) {
        return;
    }

    // replace fragment and transition with animation
    try {
        mFragmentManager.beginTransaction().setCustomAnimations(R.anim.ui_slide_in_from_bottom_frag,
                R.anim.ui_slide_out_to_bottom_frag).replace(containerId, fragment).addToBackStack(null)
                .commit();
    } catch (IllegalStateException e) {
        e.printStackTrace();
        mFragmentManager.beginTransaction().setCustomAnimations(R.anim.ui_slide_in_from_bottom_frag,
                R.anim.ui_slide_out_to_bottom_frag).replace(containerId, fragment).addToBackStack(null)
                .commitAllowingStateLoss();
    }
}

提前致谢。我关注的是来自commitAllowingStateLoss()的文档,其中包含

  

与{@link #commit}类似,但允许在a之后执行提交   活动的状态已保存。这很危险,因为提交可以   如果活动需要稍后从其状态恢复,那么就会丢失   这应该仅用于UI状态正常的情况   对用户意外更改。

对此的一些提示或建议将不胜感激。谢谢!

0 个答案:

没有答案