类图

角色

  • ViewGroup,视图容器, 核心方法addView, removeView
  • Fragment,用于定义生命周期接口,供开发侧使用(生命周期类同activity)
  • FragmentActivity, 持有FragmentManager并用它来管理Fragment的生命周期
  • FragmentManager,抽象类,仅用来定义操作Fragment的接口
    • FragmentManagerImpl,FragmentManager接口的实现类,核心方法enqueueAction,moveToState
  • FragmentTransaction,抽象类,用来定义批处理操作接口
    • 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. 一种封装手段,降低了耦合,增强了复用

更多相关文章

  1. Android面试题整理(1)
  2. Android(安卓)开发艺术探索(第一章-Activity 的生命周期和启动模
  3. 【Android】Service 的生命周期
  4. Android(安卓)OpenGL ES 包及流程摘要
  5. 在Android中访问WebService接口
  6. android细节:各种context
  7. Android开启闪光灯的几种办法
  8. Android(安卓)Retrofit2使用
  9. Android(安卓)Camera之常用接口(人脸追踪源码)简介

随机推荐

  1. Android Studio如何使用GitHub上的开源项
  2. [置顶] Jenkins构建Android项目持
  3. OpenCV学习笔记(六)—— OpenCV for Androi
  4. 安卓设计模式之_观察者模式
  5. 绑定本地Service和远程Service并调用其中
  6. RecycleView的多视图Epoxy库
  7. 在Eclipse中使用aar文件
  8. Android百度地图开发之获取apikey
  9. Android通过蓝牙获取通讯录
  10. ArrayMap的使用与详解