您的位置:首页 > 其它

EventBus源码解析(一)-官方介绍

2017-12-27 11:39 183 查看
前言: 作为EventBus源码解析的第一篇文章,我们首先来解读EventBus官方对于EventBus库的介绍。

EventBus: Events for Android

EventBus是一个为Java和Android而生的开源库,它使用了发布者/订阅者的设计模式来实现APP的松耦合。EventBus作为通信的中心,用户只需书写几行代码,就可以很方便地解除类与类之间的耦合。下图是官方提供的通信流程图。



EventBus译文是事件总线,它作为事件通信的核心,主要实现了以下两个功能:

1. 接收并缓存发布者发布的事件;

2. 通知订阅者执行订阅方法;

前文说过,EventBus的设计是基于发布者/订阅者模式的,也就是所谓的观察者模式。我们知道,传统的观察者模式,会在发布者中持有一系列的订阅者引用,当有事件发生时,由发布者遍历通知订阅者去执行相应的订阅方法,它有以下几个弊端:

1. 事件的管理和分发调度都由发布者维护,任务较重;

2. 发布者持有观察者引用,本身就存在耦合;

EventBus对这种模式做了扩展,将事件的管理和分发调度从发布者中抽离出来,形成了事件总线EventBus,也自然解除了发布者与订阅者之间的耦合,这种设计值得借鉴。

使用EventBus的好处

简化组件之间的通信

事件发布者与订阅者充分解耦

可以很好地与UI组件(例如Activity、Fragment)和后台线程配合使用

避免错综复杂且易错的依赖与生命周期问题

快速,专门为在Android上使用而优化过

体积小(jar包小于50k)

经过大量App的使用考验

拥有诸如线程投递、订阅优先级等高级特性

EventBus高级特性

基于注解:只需在订阅方法上添加注解标记@Subscribe。由于在构建时使用了注解索引技术,因此在App运行时,EventBus无需通过反射获取注解信息,而反射对运行时性能是有消耗的

Android主线程分发:当需要与UI交互时,EventBus可以将事件分发到主线程,而无需考虑事件来源-即该事件是从哪个线程发布的

后台线程分发:如果订阅者需要执行耗时长的任务,EventBus也可以使用后台线程,从而避免了主线程阻塞

事件、订阅者可继承性:在EventBus中,对象继承也适用于事件和订阅者类。假设事件A是事件B的超类,当发布类型B的事件时,该事件同时也会被发布到对事件A感兴趣的订阅者处。

零配置:用户可以立即开始使用,而无需做任何的配置。在代码的任意地方都可以使用默认的EventBus实例

可配置:可以使用建造者模式来调整EventBus的特性,以适应你的个人需求
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: