EventBus & Otto

本文介绍了EventBus和Otto这两个Android事件总线框架的对比,强调了EventBus在灵活性和线程控制上的优势。同时,详细阐述了EventBus的简单使用步骤,包括定义事件、注册、订阅、发送和解绑。最后,简要提到了EventBus的构造和源码解析。
摘要由CSDN通过智能技术生成

一、基本介绍

EventBus 是一个 Android 事件发布/订阅框架,通过解耦发布者和订阅者简化 Android 事件传递,这里的事件可以理解为消息,本文中统一称为事件。事件传递既可用于 Android 四大组件间通讯,也可以用户异步线程和主线程间通讯等等。EventBus

EventBus3.0版本有较大的更新,性能上有很大提升。这里主要介绍新版本。

传统的事件传递方式包括:Handler、BroadCastReceiver、Interface 回调,相比之下 EventBus 的优点是代码简洁,使用简单,并将事件发布和订阅充分解耦。类似框架OTTO。

二、EventBus & Otto对比

共同点

1、都是事件总线框架,满足消息/事件传递的同时,也实现了组件间的解耦.
2、注册的共同点都是采用method方法进行一个集成。

3、都采用注解的方式来标注订阅方法(旧版本的EventBus通过固定方法名标记订阅者)

4、大部分规则相同,比如订阅方法只能有一个参数。

5、都不适用进程间通信

不同点

1、OTTO更加轻量级,结构简单。EventBus稍微复杂一些。

2、OTTO默认在主线程中使用,不能在其他线程使用,通过设置ThreadEnforcer可以在任意线程使用,但是消息传递不能指定目标线程,EventBus实现了4种ThreadMode,线程之间消息传递非常灵活。
3、EventBus支持粘性事件,而OTTO不支持。即先发消息,再注册订阅者仍然能够收到消息。

3、OTTO有默认的生产者方法,可以产生默认消息,EventBus没有

三、EventBus的简单使用介绍

定义消息

[java]  view plain   copy
  print ? 在CODE上查看代码片 派生到我的代码片
  1. public class MessageEvent {  
  2.  //定义相关属性  
  3.  }  

注册

[java]  view plain   copy
  print ? 在CODE上查看代码片 派生到我的代码片
  1. eventBus.register(this);  

定义订阅者

[java]  view plain   copy
  print ? 在CODE上查看代码片 派生到我的代码片
  1. @Subscribe  
  2. public void onEvent(MessageEvent event) {  
  3. //收到消息后的处理  
  4. };  

发送消息

[java]  view plain   copy
  print ? 在CODE上查看代码片 派生到我的代码片
  1. eventBus.post(event);  

解绑

[java]  view plain   copy
  print ? 在CODE上查看代码片 派生到我的代码片
  1. eventBus.unregister(this);  

四、源码解析

1、EventBus构造

通常我们调用EventBus.getDefault()获取EventBus
[java]  view plain   copy
  print ? 在CODE上查看代码片 派生到我的代码片
  1. public static EventBus getDefault() {  
  2.     if (defaultInstance == null) {  
  3.         synchronized (EventBus.class) {  
  4.             if (defaultInstance == null) {  
  5.                 defaultInstance = new EventBus();  
  6.             }  
  7.         }  
  8.     }  
  9.     return defaultInstance;  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yue31313

感谢打赏,继续分享,给您帮忙。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值