以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
总结:markdown
BackStackRecord: 经过add(Fragmen)或replace维护一个Fragment的Op,由于它实现了Runable接口,因此经过自身run分发到FragmentManagerImpl。spa
FragmentManagerImpl:进行Fragment生命周期的分发在moveToState方法线程
activity 经过HostCallbacks 与FragmentManagerImpl创建联系code