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的特性,以适应你的个人需求
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值