EventBus简单实用

EventBus github 地址
在Android Studio中添加如下依赖:
compile 'org.greenrobot:eventbus:3.1.1'

EventBus 的使用

  1. 创建事件实体类
    当使用EventBus从一个组件向另外一个组件发送的信息,可以是储存在一个类中,该类就是一个事件,会被EventBus发送给订阅者。
public class MessageEvent {

    private String message;

    public MessageEvent(String message){
        this.message = message;
    }

    public String getMessage(){
        return message;
    }
}
  1. 向EventBus注册,成为订阅者以及解除注册
EventBus.getDefault().register(this);

通过上面代码便可以为当前类注册,成为订阅者,一般在类初始化时注册,如果是Activity则在onCreate()方法中进行注册。

EventBus.getDefault().unregister(this);

当订阅者不再需要接受事件时候,需要解绑,释放内存。

  1. 声明订阅方法
@Subscribe(threadMode = ThreadMode.MAIN,priority = 100,sticky = true)
public void test(String str){

 }

在需要接受方法上面设置@Subscribe即可,
threadMode 表示在那个线程执行此方法,
priority 表示执行的优先级,
sticky 表示是否粘性。
需要注意的是本方法必须为public,并且参数必须为一个,这个我们在后面源码分析中会解释。

  1. .发送事件
EventBus.getDefault().post(EventType eventType);

与观察者模式类似,当有事件发生时,需要通知观察者。这个方法就是通知观察者的方法,EventBus在底层进行了封装。

ThreadMode分析
POSTING:表示在发送事件的线程执行方法。
MAIN: 表示在主线程执行方法。
BACKGROUND:表示在子线程执行方法。
ASYNC:表示在非当前线程执行方法,会重新创建一个新的线程执行方法。
priority 优先级
设置该优先级的目的是,当一个事件有多个订阅者的时候,优先级高的会优先接收到事件。
sticky 粘性事件
在注册之前便把事件发生出去,等到注册之后便会收到最近发送的粘性事件(必须匹配)。注意:只会接收到最近发送的一次粘性事件,之前的会接受不到。

总结
至此EventBus的使用方式就讲到这里,下面看EventBus的源码解析。

EventBus源码解析

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