android用fragment闪退,Android | 玩转fragment,使用commit出现闪退问题解析

在最近的项目过程中,使用了fragment,我们常规的用法如下:getSupportFragmentManager().beginTransaction().add(R.id.fragment_content, new TestFragment()).commit();

这样的用法对于很多童鞋而言都是比较熟悉的,但是在测试的过程中我们有时候会报如下错误信息:Caused by: java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState

从错误信息就是说我们不能在调用onSaveInstanceState进行commit操作。网上的解决办法是使用commitAllowingStateLoss替换commit。试了一下确实能解决这个问题,但是为什么呢?这就是写这篇的主要原因,划重点。

下面通过源码去看这两个方法的区别:

首先从我们获取 FragmentTransaction 类的实例开始,

即getSupportFragmentManager() ,源码如下:/*** Return the FragmentManager for interacting with fragments associated* with this activity.*/public FragmentManager getSupportFragmentManager() {return mFragments;}

而这个返回的 mFragments 是一个 FragmentManagerImpl 类 的实例,他继承自FragmentManager 这个类:final FragmentManagerImpl mFragments = new FragmentManagerImpl();

我们

你可能感兴趣的:(android用fragment闪退,Android | 玩转fragment,使用commit出现闪退问题解析)