EventBus3.0详解

EventBus描述

   一款针对Android的发布/订阅事件总线,订阅者订阅事件到总线,发送者发布事件。采用消息发布/订阅的一个很大的优点就是代码的简洁性,并且能够有效地降低消息发布者和订阅者之间的耦合度。可以很好的在Fragment与Fragment之间 和Activity与Fragment之间发送消息

EventBus主要三个角色

Event:事件。可以是任意类型的对象
Subscriber:事件订阅者,接收特定的事件。在EventBus中,使用约定来指定事件订阅者以简化使用。即所有事件订阅都都是以onEvent开头的函数,具体来说,函数的名字是onEvent,onEventMainThread,onEventBackgroundThread,onEventAsync这四个,这个和ThreadMode(下面讲)有关。
Publisher:事件发布者,用于通知 Subscriber 有事件发生。可以在任意线程任意位置发送事件,直接调用eventBus.post(Object) 方法,可以自己实例化 EventBus对象,但一般使用默认的单例就好了:EventBus.getDefault(), 根据post函数参数的类型,会自动调用订阅相应类型事件的函数。

EventBus的四种ThreadMode(线程模型)

onEventMainThread代表这个方法会在UI线程执行

onEventPostThread代表这个方法会在当前发布事件的线程执行

BackgroundThread这个方法,如果在非UI线程发布的事件,则直接执行,和发布在同一个线程中。如果在UI线程发布的事件,则加入后台任务队列,使用线程池一个接一个调用。

Async 加入后台任务队列,使用线程池调用,注意没有BackgroundThread中的一个接一个。

##基本用法

1.自定义一个事件类

public class MessageEvent {
    private final String sid ;
    public MessageEvent(String sid) {
        this.sid = sid;
    }

    public String getSid() {
        return sid;
    }
}

2.在需要订阅事件的地方注册事件

EventBus.getDefault().register(this)

3.发送事件

EventBus.getDefault().post(messageEvent);

4.处理事件

@Subscribe(threadMode = ThreadMode.MAIN)
public void XXX(MessageEvent messageEvent) {
    ...
}

事件处理函数的访问权限必须为public,否则会报异常。事件处理的方法 xxx可以随便取名,但是需要添加一个注解@Subscribe,并且要指定线程模型(默认为POSTING)。

5.取消事件订阅

EventBus.getDefault().unregister(this);





你可能感兴趣的:(EventBus3.0详解)