Android Fragment

来源:互联网 发布:mac 查看下载速度 编辑:程序博客网 时间:2024/06/08 01:00

原文地址:http://mobile.51cto.com/aprogram-448443_1.htm

Fragment是google由3.0开始加入SDK的界面解决方案。

后续由谷歌团队维护并发行了support包以支持低版本SDK来使用Fragment。

谁在使用Fragment

  • 网易新闻
  • 网易云音乐
  • 百度音乐
  • 多米
  • 豌豆荚
  • 小米app
  • Path
  • Pocket
  • Fuubo

 Fragment的优点 —————- * adding and removing Fragment可以做动画的效果,平滑过度

  • 自动化堆栈管理,所以返回键可以删除动态添加的Fragment,最后销毁Activity,无需做过多判断

  • 集成ActionBar的标签,可以替代TabHost,ActivityGrounp,与谷歌设计风格紧密结合

  • 布局更加模块化.与原Activity中的Layout分块化,VCBase的分块化道理相同

  • 灵活准确的生命周期去管理当前View的状态记录以及横竖屏处理

  • Fragment管理的View,可同时使用在Phone和Pad上,一份代码两份机器,可重用性高

  • Is a View, More than View

  • 可以从startActivityForResult中接收到返回结果,但是View不能

  • 唯一Id标识,可以从FragmentManager中获取id对应的Fragment

Fragment的缺点

与其说是Fragment的缺点,不如说是每个应用程序模块之间的通讯都面临地耦合问题

  • Fragment之间的通讯依赖Activity使用接口管理并通知

如何解决模块之间的通讯的耦合问题

1.使用接口,让Activity扮演管理角色,负责分发消息到该窗口的子View

该方案的缺点

  • 不方便使用单元测试
  • 随着应用功能的增加,需要监听的事件越来越多,导致越来越多的接口声明以及绑定

2.使用LocalBroadcastManager + IntentFilter解决不同组件通讯,Intent负责搭载数据

该方案的缺点

  • 不方便单元测试,需要实例化Intent,填装Intent的数据,实现Broadcast receivers以及再次提取Intent中的数据
  • receiver中不可做耗时操作,因为reciver是限时进程,10秒后会被系统kill掉,如果需要做耗时操作,需另外启Service来完成

3.EventBus

  • 消息订阅者:Activity or Fragment等订阅类注册自己到EventBus中
  • 消息发布者:只负责发布消息以及消息包装数据到EventBus
  • 回调基于命名约定以及消息包装对象
  • 方便的单元测试

4.otto 这里不做介绍,下面有demo链接,基于注解的解偶通信组件

其实按照MVC的思想,Activity就真正的变成了Controler,

Activity中不涉及任何的业务逻辑的代码,只负责分发消息到不同的子View(Fragment)。

如果希望整个应用只有一个Activity,就需要再抽象出一层Controller,负责处理Activity与其子Controller的通讯

相关下载

  • EventBus项目托管
  • EventBus-PPT
  • [otto项目托管](https://github.com/square/otto
  • otto-demo

项目

我们直接看代码吧,因为表达能力还训练,加上有点懒 ^_^

0 0
原创粉丝点击