Fragment源码

以6.0代码

ActivityThread.performLaunchActivity-> // 通过反射初始化Activity,Activity new出来后会同时实例化他的全局变
                         // 量,mFragments,这个对象实际是FragmentController,这里主要
                        // 把Activity内部类,HostCallbacks保持下来
FragmentController.mHost = HostCallbacks

Activity.mFragments.attachHost   // 这一步会mFragmentManager(FragmentManagerImpl)与HostCallbacks
                    // 关联起来,建立Activity与mFragmentManager的关系通过handler


ActivityThread.callActivityOnCreate->
自定义Activity.onCreate-> super.onCreate //源码Activity

FragmentManagerImpl.dispatchCreate->  //第一次只是改变mCurState为CREATED、

自定义Activity.onCreate->
getFragmentManager->  // 返回FragmentManagerImpl

  FragmentManagerImpl.beginTransaction  //得到BackStackRecord

  BackStackRecord.replace -> doAddOp  //Op双向链表,将Fragment加入这个双向链表中

  BackStackRecord.commit ->  // 提交事务,主要是通过Activity的handler发送到主线程消息队列等候处理

FragmentManagerImpl.execPendingActions // 遍历BackStackRecord的run方法,然后遍历Op(既Fragment)
                                         // FragmentManagerImpl.addFragment(将Fragment加进去)

FragmentManagerImpl.addFragment // 初始化 mActive(存放活动的Fragment)
FragmentManagerImpl.moveToState // 开始执行Fragment的生命周期了
                   // attach-> oncreate->oncreateView -> onActivityCreated

Activity.performCreateCommon -> // 第二次 dispatchActivityCreated(与上边的第一次相呼应,一个是通过
                                // Activity的onCreate调用,一个是performCreateCommon调用)

FragmentManagerImpl.moveToState

总结:

BackStackRecord: 通过add(Fragmen)或replace维护一个Fragment的Op,因为它实现了Runable接口,所以通过自身run分发到FragmentManagerImpl。

FragmentManagerImpl:进行Fragment生命周期的分发在moveToState方法

activity 通过HostCallbacks 与FragmentManagerImpl建立联系

转载于:https://my.oschina.net/u/3336230/blog/1601244

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值