学习笔记,整理中;
面:
自己思路整理:
1. fragment生命周期源码执行过程:(android x新思路这样处理的)
- FragmentMangerImpl:fragment内部先到active 显示出来 到resume =4 的时候,再反过来执行;
- 不同于我们看到的,我们看到的是显示出来后 还要接着调stop,destory等等
- 重点函数:movetostate(started)分发
- 核心逻辑在FragmentManagerImpl 一般用是用FragmentController 中转;不去用内部的
- 具体:执行各种操作add,remove,replace... ;操作都放到mOps;做了个优化,换成了add,remove;进入movetostate重走生命周期
- 一个算法 ArrayList<BackStackRecord> mBackStackIndices; ArrayList<Interger> mAvailBackStackIndices, 两个数组:
第一个数组存加进来的,当需要remove的时候把当前位置的内容改为null;并在第二个数组里面加入第一个数组的index; 下次使用的时候如果又有新的进来,则把第二个数组的index用来作为标记,在第一个数组对于位置添加。 - fragment 状态恢复保存:
onSaveInstanceState(Bundle outState) 记录fragment所有状态
onCreate(@Nullable Bundle savedInstanceState) 得到所有状态恢复回去 还是走的movetostate
2. 几个重要的类
- FragmentActivity
- (主要类)FragmentController
FragmentHostCallBack<?> mHost;
主要用来分发各种生命周期 dispatchxxx
用来提供FragmentManageImpl给Activity用 getSupportFragmentManger()
一般用的都是这个 - FragmentHostCallback
中转到核心逻辑部分 - (主要类)FragmentMangerImpl --> (Abstract FragmentManger)
dispatchxxx的真实操作都在这个类
存放事务操作的集合
ArrayList<OpGenerater> mPendingActions;
回退栈记录
ArrayList<BackStackRecord> mBackStack;
ArrayList<Fragment> mAdd
beginTransaction;
enqueueAction(); - FragmentTransaction
定义了各种操作对应的标识 add,replace等等;ArrayList<Op> mOps; - BackStackRecord
各种事务操作 add/replace/commit