天天看点

Fragment源码解析

Fragment源码解析

我们在分析任何源码时都是从根开始追溯,那么我们在分析Fragment时就从getFragmentManager()开始

FragmentManager分析

Fragment源码解析

接下来看FragmentManagerImpl类FragmentManagerImpl是继承FragmentManager的。

Fragment源码解析

然后我们看到操作Fragment的方法都是在BackStackRecord这个类里面,继续跟踪BackStackRecord发现我们的add()、replace()、remove()、hide()、show()操作实际上都是往一个List里addOp(),只不过会在Op对象里标识是add是replace还是remove等

Fragment源码解析

都是往list里add是不是我们以上的这些操作都得谨慎呢?那看来最根本的操作就靠commit()了,我们先来看commit()是怎么处理的

Fragment源码解析
Fragment源码解析

这里在FragmentManager里做了两件事,一是讲fragment信息添加到集合里;二是讲操作添加到操作队列里并执行任务。那么我们看具体怎么执行

Fragment源码解析

这是通过Handler.post()消息通知执行

Fragment源码解析

最后执行moveToState()进入Fragment生命周期,原来Fragment的生命周期全由FragmentManager操控着,并且Activity是它的间接操控者。

那么回到上面我们预留的问题:为什么各种操作都是add呢,到这里我们终于看见了,原来是在execPendingActions()中才统一处理

Fragment源码解析

到此我们就把Fragment分析完了,那么会有些人问为什么没提及Fragment里面的代码?其实Fragment只是生命周期的延生,所以说Android的设计确实精妙。那么建议今后的开发过程中最好秉承Fragment只负责UI呈现,不做业务逻辑处理。