Coin163

首页 > android Fragment 源码分析

android Fragment 源码分析

相关标签: fragment android 源码

2021腾讯云限时秒杀,爆款1核2G云服务器298元/3年!(领取2860元代金券),
地址https://cloud.tencent.com/act/cps/redirect?redirect=1062

2021阿里云最低价产品入口+领取代金券(老用户3折起),
入口地址https://www.aliyun.com/minisite/goods

相关推荐:Android源码分析-全面理解Context

前言 Context在android中的作用不言而喻,当我们访问当前应用的资源,启动一个新的activity的时候都需要提供Context,而这个Context到底是什么呢,这个问题好像很好回答又好像难以说清楚。从字面意思,Context的意思是“上下文”,或者也可以叫做环境、场景等

类图

fragment_uml

角色

  • ViewGroup,视图容器, 核心方法addView, removeView
  • Fragment,用于定义生命周期接口,供开发侧使用(生命周期类同activity)
  • FragmentActivity, 持有FragmentManager并用它来管理Fragment的生命周期
  • FragmentManager,抽象类,仅用来定义操作Fragment的接口
    • FragmentManagerImpl,FragmentManager接口的实现类,核心方法enqueueAction,moveToState
  • FragmentTransaction,抽象类,

    相关推荐:【oschina android源码分析】总结

    时间:2016.05.21 基于:oschinaV2.5.5 开源中国的android源码从性质上应该属于工业代码,相比一些个人开发者的作品更为规范一些,架构设计也颇为合理,有很多值得学习的地方。基本可以满足一些公司的需求。

    用来定义批处理操作接口
    • BackStackRecord是FragmentTransaction的实现类,持有一个Op(操作)的双向链表,该链表代表这次批处理的内容,核心方法commit,run

交互

  1. 用户开发好了相关Fragment
  2. FragmentActivity说,FragmentManager你来处理下(getSupportFragmentManager())
  3. FragmentManagerImpl说,先给我填个事务操作的请求我好一块儿处理了(beginTransaction())
  4. 那就填写事务,要干嘛要干嘛(eg. transaction.add(x).remove(xx).replace(xxx))
  5. 填写后记得提交事务transaction.commit()
  6. 提交之后事务就进入FragmentManagerImpl的待处理队列了(manager.enqueueAction())
  7. …排队时间…
  8. FragmentManagerImpl处理到刚提交的事务了(transaction.run())
    1. FragmentManagerImpl逐个处理事务里的请求内容,这个请求要这么处理,那个请求要那么处理……(case OP_ADD:mManager.addFragment; case OP_REMOVE::mManager.removeFragment; )
    2. 举个具体处理的例子,case OP_ADD:mManager.addFragment:先激活makeActive(fragment);再维护更新好fragment的生命周期moveToState(fragment);完成各种生命周期函数的回调并将fragment的view从ViewGroup里add/remove
  9. DONE

So what

  1. 将Fragment理解为视图层, 并且其生命周期和activity的保持一致
  2. 一个activity的逻辑就可以封装在多个图层中了
  3. 一种封装手段,降低了耦合,增强了复用

原文

类图 角色 ViewGroup,视图容器, 核心方法addView, removeView Fragment,用于定义生命周期接口,供开发侧使用(生命周期类同activity) FragmentActivity, 持有FragmentManager并用它来管理Fra

------分隔线----------------------------