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

前言: 作为EventBus源码解析的第一篇文章,我们首先来解读EventBus官方对于EventBus库的介绍。


EventBus: Events for Android

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

image

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的特性,以适应你的个人需求

你可能感兴趣的:(EventBus源码解析(一)-官方介绍)