EventBus初探
前两天看了下eventbus,今天跟大家分享一下。1:EventBus地址 https://github.com/greenrobot/EventBus借用下官网的图片上图是eventbus给出的描述,主要包括三部分1:publisher发布者 2:subscriber订阅者 3:event事件。2:添加EventBus到项目中 这是只给出gradle中添加compile 'o
前两天看了下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。
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);
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)