一、为何使用EventBus
今天我们介绍一个将耦合度降到极低的框架EventBus。
在这之前处理APP全局的监听,大多时候用的是BrodercastReceiver来实现时间的监听。但用起来很不方便,
BrodercastReceiver在APP中限定只监听系统的广播事件(如:电量,网络等)就OK了。在一些模块或组件之间的时间传递大多用的观察者,在使用的过程中你会发现一个个的回掉,各式各样的参数弄得你头晕目眩。那我们就接触好的框架解决开发中遇见的问题,让自己更轻松的开发。
二、EventBus原理分析
EventBus基于观察者模式的Android事件分发总线。通过事件总线可以实现Activity、Fragment、Service等不同模块或组件之间的通信。避免不同组件和模块之间的耦合问题。方便代码的维护与理解。
事件总线是基于观察者模式的思想实现的,它使用发布订阅的方式支持组件和模块间的通信,摒弃了观察者模式需要显示注册回调的缺点,同时可用于替换Java中传统的事件监听方式。
发布者Publisher:发布某种事件的对象。
事件Event:一个简单的POJO对象。只包含数据,不对数据进行处理。
事件总线EventBus: 负责存储时间信息,处理事件的流动和分发,通过时间总线,事件发布者与订阅者互相不知道对方的存在,是解耦的。事件被发布到总线上({@link #post(Object)})到总线,它将它传递给具有事件类型匹配处理程序方法的订阅服务器。要接收事件,订阅者必须使用{@link #register(Object)}向总线注册自己。注册之后,订阅者将收到事件,直到调用{@link #unregister(Object)}。事件处理方法必须由 {@link Subscribe}必须是public,返回非(空),并且只有一个参数 (事件)。
订阅者Subscriber: 订阅某个事件,一般情况会有一个回掉函数处理接收到的事件。订阅者通过{@link #register(Object)}向总线注册自己,即为订阅事件。订阅者也可以直到调用{@link #unregister(Object)}取消事件订阅。
三、EventBus开源库使用(来自greenrobot/EventBus)
优点:
1.简化组件之间的通信
2.分离事件发送器和接收器
3.对activity、fragment和线程进行良好的执行
4.避免复杂和容易出错的依赖关系和生命周期问题。
5.快速;专为高性能优化
6.体积小(<50k)
Android studio & Gradle使用分为以下几步:
0.在Gradle中添加在线依赖。
compile 'org.greenrobot:eventbus:3.0.0'
1.定义消息事件MessageEvent,也就是创建事件类型