Guava — EventBus

Stella981
• 阅读 918

Guava 提供了事件总线的一个实现方案EventBus。它是事件发布订阅模式的实现,观察者模式。Guava为我们提供了同步实现EventBus和异步实现AsyncEventBus两个事件总线,他们都不是单例的

eventBus.post(1);
eventBus.post(1L);

post方法,直接发布事件

订阅者需要注册进来,eventBus.register方法注册订阅者。

订阅者的方法需要加上**@Subscribe注解**就可以监听事件了。订阅者的实例类对应的是自定义的方法。也就是自己定义class可以有多个带Subscribe方法。每个方法都是一个监听者。自定义方法只能有一个参数,参数类型一致,事件就会执行。参数不能是简单类型,要封装类型。

如果eventBus发出的事件,没有任何订阅者处理,eventBus就会发出一个DeadEvent,我们可以监测这个事件。

@Subscribe public void lister(DeadEvent event) { System.out.printf("%s=%s from dead events%n", event.getSource().getClass(), event.getEvent()); }

class com.google.common.eventbus.AsyncEventBus=java.lang.Object@6726973 from dead events

注意:同一个类只能register一次,避免重复预订。多次预订无效。重写了equals方法并标识为final。

eventBus有个属性identifier,用来标识。这说明在一个应用里是可以有多个EventBus的。

当存在继承时,@Subscribe 是可以继承下来的。重写方法不需要在加这个注解 也会监听事件。

参考

http://blog.csdn.net/yanghua\_kobe/article/details/46317297

http://www.cnblogs.com/whitewolf/p/4132840.html

http://blog.csdn.net/wzy\_1988/article/details/38922449

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
待兔 待兔
4个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
腾讯安卓面试,完美讲解内存缓存LruCache实现原理
开头在Android开发当中,相信大家对第三方库的重要性是无需多说的,尤其是三方库源码更是重中之重,而EventBus源码就属于其中的一个重点。EventBus是安卓(Java中也可以用)开发中非常流行的一个第三方库,是一种发布/订阅事件的总线.想必每个入了门的Android开发者都多少对EventBus有过了解,EventBus是一个Android事件发布
Stella981 Stella981
3年前
Guava库学习:学习Guava EventBus(二)EventBus 事件订阅示例
    原文地址:Guava库学习:学习GuavaEventBus(二)EventBus事件订阅示例(https://www.oschina.net/action/GoToLink?urlhttp%3A%2F%2Fwww.xx566.com%2Fdetail%2F215.html)上一篇Guava库学习:学习GuavaEventBus(一
Stella981 Stella981
3年前
Rxjava和EventBus对比
总的来说,EventBus是一款针对Android优化的发布/订阅事件总线,主要功能是替代Intent,Handler,BroadCast在Fragment,Activity,Service,线程之间传递消息。而Rxjava则是一种基于异步数据流的处理方案。如果一个订阅者需要注册多个事件的时候,Rxjava需要一个个单独的注册,而EventBus则可以实现一
Stella981 Stella981
3年前
EventBus源码分析
一、        EventBus简介1.1、EventBusEventBus是一个Android事件发布/订阅框架,通过解耦发布者和订阅者简化Android事件传递,这里的事件可以理解为消息,本文中统一称为事件。事件传递既可用于Android四大组件间通讯,也可以用户异步线程和主线程间通讯等等。传统的事件
Stella981 Stella981
3年前
Android面试之EventBus
简介众所周知,EventBus是一款用在Android开发中的发布/订阅事件总线框架,基于观察者模式,将事件的接收者和发送者分开,简化了组件之间的通信操作,使用简单、效率高、体积小!EventBus使用了典型的发布/订阅事件模式,下面是EventBus官方给出的原理示意图。!在这里插入图片描述(https://oscimg.o
Stella981 Stella981
3年前
ABP EventBus(事件总线)
事件总线就是订阅/发布模式的一种实现  事件总线就是为了降低耦合1.比如在winform中 到处都是事件 !(https://oscimg.oschina.net/oscnet/ed3426bf15550c4b0623956eb95e826780d.png)触发事件的对象 sender事件的数据  e事件的处理逻辑 方法
Stella981 Stella981
3年前
Guava中的EventBus
其实代码中经常会遇到跟主流程分支出去的异步逻辑,比如说:爬虫处理逻辑中,进行心跳打点,订单处理中,需要触发用户的个人信息变更等。这个时候就应该使用观察者模式。EventBus是Guava的事件处理机制,是设计模式中的观察者模式(生产/消费者编程模型)的优雅实现。对于事件监听和发布订阅模式,EventBus是一个非常优雅和简单解决方案,我们不用创建
Stella981 Stella981
3年前
Noark入门之异步事件
引入异步事件主要是为了各模块的解耦,每当完成一个动作时,向系统发布一个事件,由关心的模块自己监听处理,可选择同步处理,异步处理,延迟处理。何时发布事件,当其他模块关心此动作时<br比如获得道具时,任务系统模块要判定完成进度,BI模块需要上报等等都可以监听此事件,已达模块解耦0x00事件源一个实现xyz.noark.core.event