前两天看了下eventbus,今天跟大家分享一下。
1:EventBus地址
https://github.com/greenrobot/EventBus
借用下官网的图片
上图是eventbus给出的描述,主要包括三部分1:publisher发布者 2:subscriber订阅者 3:event事件。
2:添加EventBus到项目中
这是只给出gradle中添加
compile 'org.greenrobot:eventbus:3.1.1'
3: 定义事件
public class MessageEvent {
private String message;
public MessageEvent(String message) {
this.message = message;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}
如上定义好后准备下一步操作,其实就是定义bean类,用于定义接收信息的model。
扫描二维码关注公众号,回复:
2751531 查看本文章
4:注册和取消注册
5:处理事件
@Subscribe(threadMode = ThreadMode.MAIN)
public void onMessageEvent(MessageEvent messageEvent){
tvDesc.setText(messageEvent.getMessage());
}
利用注解,定义好threadmode;threadmode一共有如下类型:
ThreadMode.POSTING:订阅者在发布事件同一线程中调用,这是默认值。事件传递时同步完成的,所有订阅服务器在发布完 成后都会被调用。
ThreadMode.Main :事件处理函数在主线程(UI)线程,所以在这里不能进行耗时操作,以免阻塞主线程。
ThreadMode.BACKGROUND:订阅者在后台线程中被调用,
ThreadMode.ASYNC:事件处理函数始终创建新的线程,与发布线程和主线程无关。eventBus使用线程池来有效的处理程序通知
ThreadMode.Main_ordered:事件处理函数在ui线程,事件总是先入队,后交付给用户。事件处理严格按串行顺序。
除了模式外,还可以指定优先级:
@Subscribe(threadMode = ThreadMode.MAIN,priority =2)
public void onMessageEvent1(MessageEvent messageEvent){
Log.e("messageevent","2");
}
@Subscribe(threadMode = ThreadMode.MAIN,priority = 3)
public void onMessageEvent2(MessageEvent messageEvent){
Log.e("messageevent","3");
}
priority默认为0,数值越大,优先级越高。
6:发送事件
EventBus.getDefault.post(Object event);