EventBus简单使用

eventbus干什么的?

简单说就是干Intent、Handler、Broadcast他们通信时候干的事情。

github文档

https://github.com/greenrobot/EventBus

EventBus是Android和Java的发布/订阅事件总线。

总线(Bus)是计算机各种功能部件之间传送信息的公共通信干线。

github上描述的很清楚,大家可以查看原文

Add EventBus to your project


EventBus简单使用_第1张图片

如何使用

EventBus简单使用_第2张图片

这样我们就会简单使用了。

写了一个demo

主界面

EventBus简单使用_第3张图片

第二个界面

EventBus简单使用_第4张图片

MessageEvent

EventBus简单使用_第5张图片

输出日志

我们来测试一下发送不同对象


我增加一个其他对象

MSG (和MessageEvent区分一下)

EventBus简单使用_第6张图片

之后我们只修改第二个activity


EventBus简单使用_第7张图片

注意 secondGet更换了参数接受的是MSG  主界面还接受的是MessageEvent

这个时候


只有一条输出了 说明我们post不同的东西  他会根据你们订阅者接收不同对象,而传给不同的人。这样我们扩展起来就很方便了

ThreadMode

查看源码  ThreadMode 是个枚举 主要包括以下几个

public enum ThreadMode {

POSTING,//和发送者同线程

MAIN,//主线程  如果不是android使用 他同POSTING

MAIN_ORDERED,//和主线程不同在于 该活动将始终排队等待交付。 这可确保后置调用是非阻塞的。

BACKGROUND,//子线程  如果已经在子线程  则不会创建新的 而使用当前的

ASYNC//始终创建一个新的子线程

}

Subscribe

当我看Subscribe源码是 发现他不进可以设置线程 还能设置 boolean sticky 和int priority

public @interface Subscribe{

ThreadModethreadMode() default ThreadMode.POSTING;

booleansticky() default false;

intpriority() default 0;

}

sticky 是一个粘性事件,和广播停滞一样但是他只能缓存一条


我发出两条粘性广播,单只会输出一条


priority 决定了接收的优先级,同优先级应该是按照注册的先后顺序,建议,同时接收时,最好加上优先级

你可能感兴趣的:(EventBus简单使用)