一,EventBus3.0介绍

参考文献

  1. EventBus官网
  2. EventBus github
  3. EventBus官方文档
  4. EventBus作者blog
  5. EventBus3.0发布说明
  6. Eventbus API Doc

概述

  • EventBus是一个Android开源库,其使用发布/订阅模式,以提供代码间的松耦合。
  • EventBus使用中央通信方式,仅仅使用几行简单的代码,就可以达到解耦代码的目的。从而,简化代码,移除依赖,加快APP的开发速度。
  • EventBus是一个消息总线,针对Android优化的发布/订阅事件总线.以观察者模式实现,用于简化应用程序内各组件间、组件与后台线程间的通信,可以轻易切换线程、开辟线程。
  • EventBus简单来说:主要功能是替代Intent,Handler,BroadCast在Fragment,Activity,Service,线程之间传递消息.
  • 比如请求网络,等网络返回时通过Handler或Broadcast通知UI,两个Fragment之间需要通过Listener通信,这些需求都可以通过EventBus实现。

EventBus优点

  • 开销小,代码更优雅
  • 简化组件之间的通信
  • 解耦事件的发送者和接受者
    • 耦合:是指两个或两个以上的体系或两种运动形式间通 过相互作用而彼此影响以至联合起来的现象。
    • 解耦:就是用数学方法将两种运动分离开来处理问题,常用解耦方法就是忽略或简化对所研究问题影响较小的一种运动,只分析主要的运动。
  • 很好的应用于Activity之间,Fragment之间,后台线程之间的通信,避免使用intent或者handler所带来的复杂度
  • 可以避免复杂的,易于出错的依赖和生命周期问题
  • 速度快,尤其是在做了优化之后
  • 轻量 (大概 50k 的jar包)
  • 有诸多高级特性,例如多种类型的线程模式,可以指定订阅者(subscriber)的优先级

EventBus特性

  • 简单易用的基于注解的API:简单地把@Subscribe注解放在你的订阅方法前面即可。通过编译期的订阅者索引,app不需要在运行期做注解反射。
  • 支持事件投递到Android主线程:当订阅者需要和UI做交互的时候,EventBus能发送事件到主线程中去,而不管该事件是从哪个线程中发出来的。
  • 支持事件投递到后台线程:当订阅者需要做耗时任务时,EventBus能发送事件到后台线程中去,避免阻塞主线程。
  • 支持事件&订阅者继承关系:在EventBus中,面向对象也被应用到事件和订阅者类中。例如,事件类A是事件类B的父类,这时,发送B类型的事件,该事件也会发送给对于事件类A感兴趣的订阅者。对于订阅者类,也存在相似的继承关系。
  • 零设定即可使用:不需要任何设定,在你代码的任何地方,使用一个现成的默认的EventBus实例对象,你就可以开始工作了。
  • 可配置:使用建造者模式,你可以调整EventBus的行为,使之满足你的需求。

相似产品比较

  • EventBus
    开发者:greenrobot
    特点:用户最多,简洁,方便,小巧,文档简洁明了
  • Guava
    开发者:google
    特点: 一个庞大的工具类库,EventBus只是一个小功能
  • otto
    开发者:square
    特点:fork guava ,用的人不少
  • AndroidEventBus
    开发者:何红辉
    特点:模仿EventBus开发的

使用前的配置:

app中的modul目录下builde.gradle文件dependencies 中添加依赖后进行同步:

implementation 'org.greenrobot:eventbus:3.2.0'
//implementation 'org.greenrobot:eventbus:3.1.1'

使用EventBus3.0步骤

  • 定义事件
    定义一个实体类,定义必要的属性
  • 准备订阅者
    定义一个方法,接收事件的实体类
  • 注册注销
    在Activity创建的时候注册Activity销毁的时候注销
  • 发送事件
    在且当的时候发送事件,例如子线程中获取 到数据需要到主线程更新UI

EventBus主要角色:

  • Event 传递的事件对象
  • Subscriber 事件的订阅者
  • Publisher 事件的发布者
  • ThreadMode 定义函数在何种线程中执行

EventBus优缺点:

目前发现唯一的缺点就是类似之前策略模式一样的诟病,每个事件都必须自定义一个事件类,造成事件类太多,无形中加大了维护成本

你可能感兴趣的:(一,EventBus3.0介绍)