androidframework15-fragment

学习笔记,整理中;

面:


自己思路整理:

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

摘要:


内容:

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 文章里所有分析都是根据Android Sdk 25.3.1 在分析栈管理之前先来了解几个基本的概念和 Fragme...
    licrafter阅读 5,645评论 0 5
  • 本次分析Fragment 1.3.4版本,不同版本源码会不同! Fragment官方文档[https://deve...
    进击的包籽阅读 498评论 0 0
  • 0 认知 Fragment官方的翻译名为:片段,表示 Activity中的行为或用户界面部分。 相比Activit...
    我是Asha阅读 2,991评论 2 25
  • 我是黑夜里大雨纷飞的人啊 1 “又到一年六月,有人笑有人哭,有人欢乐有人忧愁,有人惊喜有人失落,有的觉得收获满满有...
    陌忘宇阅读 8,630评论 28 53
  • 信任包括信任自己和信任他人 很多时候,很多事情,失败、遗憾、错过,源于不自信,不信任他人 觉得自己做不成,别人做不...
    吴氵晃阅读 6,242评论 4 8