Fragment源码解析
我们在分析任何源码时都是从根开始追溯,那么我们在分析Fragment时就从getFragmentManager()开始
FragmentManager分析
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIyZuBnLwQDNwMTMxYTM1EjNwkTMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
接下来看FragmentManagerImpl类FragmentManagerImpl是继承FragmentManager的。
然后我们看到操作Fragment的方法都是在BackStackRecord这个类里面,继续跟踪BackStackRecord发现我们的add()、replace()、remove()、hide()、show()操作实际上都是往一个List里addOp(),只不过会在Op对象里标识是add是replace还是remove等
都是往list里add是不是我们以上的这些操作都得谨慎呢?那看来最根本的操作就靠commit()了,我们先来看commit()是怎么处理的
这里在FragmentManager里做了两件事,一是讲fragment信息添加到集合里;二是讲操作添加到操作队列里并执行任务。那么我们看具体怎么执行
这是通过Handler.post()消息通知执行
最后执行moveToState()进入Fragment生命周期,原来Fragment的生命周期全由FragmentManager操控着,并且Activity是它的间接操控者。
那么回到上面我们预留的问题:为什么各种操作都是add呢,到这里我们终于看见了,原来是在execPendingActions()中才统一处理
到此我们就把Fragment分析完了,那么会有些人问为什么没提及Fragment里面的代码?其实Fragment只是生命周期的延生,所以说Android的设计确实精妙。那么建议今后的开发过程中最好秉承Fragment只负责UI呈现,不做业务逻辑处理。