-
Notifications
You must be signed in to change notification settings - Fork 43
android_fragment_impl
cheyiliu edited this page May 29, 2016
·
7 revisions
- ViewGroup,视图容器, 核心方法addView, removeView
- Fragment,用于定义生命周期接口,供开发侧使用(生命周期类同activity)
- FragmentActivity, 持有FragmentManager并用它来管理Fragment的生命周期
- FragmentManager,抽象类,仅用来定义操作Fragment的接口
- FragmentManagerImpl,FragmentManager接口的实现类,核心方法enqueueAction,moveToState
- FragmentTransaction,抽象类,用来定义批处理操作接口
- BackStackRecord是FragmentTransaction的实现类,持有一个Op(操作)的双向链表,该链表代表这次批处理的内容,核心方法commit,run
- 用户开发好了相关Fragment
- FragmentActivity说,FragmentManager你来处理下(getSupportFragmentManager())
- FragmentManagerImpl说,先给我填个事务操作的请求我好一块儿处理了(beginTransaction())
- 那就填写事务,要干嘛要干嘛(eg. transaction.add(x).remove(xx).replace(xxx))
- 填写后记得提交事务transaction.commit()
- 提交之后事务就进入FragmentManagerImpl的待处理队列了(manager.enqueueAction())
- ...排队时间...
- FragmentManagerImpl处理到刚提交的事务了(transaction.run())
- FragmentManagerImpl逐个处理事务里的请求内容,这个请求要这么处理,那个请求要那么处理……(case OP_ADD:mManager.addFragment; case OP_REMOVE::mManager.removeFragment; )
- 举个具体处理的例子,case OP_ADD:mManager.addFragment:先激活makeActive(fragment);再维护更新好fragment的生命周期moveToState(fragment);完成各种生命周期函数的回调并将fragment的view从ViewGroup里add/remove
- DONE
- 将Fragment理解为视图层, 并且其生命周期和activity的保持一致
- 一个activity的逻辑就可以封装在多个图层中了
- 一种封装手段,降低了耦合,增强了复用
Just build something.