EventBus(面试)
1.EventBus的的定义
事件订阅发布的轻量级框架。是一个android端优化的publish,可以简化我们的通讯过程。
2.EventBus的作用
实现两个fragment之间的通讯,activity和fragment的交互。简化通讯过程。流程跨多个界面。推送
3.EventBus的使用
添加依赖
compile 'org.greenrobot:eventbus:3.0.0'
定义事件
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;
}
}
注册解注册(在需要订阅和接受消息的界面初始化中注册,销毁界面时解注册)
EventBus.getDefault().register(this);
//接收事件
@Subscribe(threadMode = ThreadMode.MAIN)
public void fresh(MessageEvent messageEvent) {
M2Log.d("MessageEvent -----------------> MainActivity");
}
EventBus.getDefault().post(new MessageEvent("这里是发送消息"));
4.EventBus的机制
是一个观察者模式
所有注册了EventBus的页面就是订阅者,能够收到消息发送者通过post发送的消息,定义的类就是消息。
5.post和postSticky的区别
post:EventBus的注册页面只能收到注册之后发送的发送的消息
postSticky:EventBus的注册页面注册之前只收发送的消息都能收到
6.EventBus消息处理模型
POSTING:(默认) 事件发送的线程就是事件处理的线程
MIAN:主线程直接调用,可以直接更新UI,但是要快速返回,否则容易造成线程堵塞
MIAN_ORDERED:相当于吧MAIN模型封装成序列,然后按照顺序处理
BACKGROUND:在后台线程处理,如果不是主线程发布消息,就在发布线程处理,如果是主线程发布消息,就在后台线程处理。
ASYCNO:开启一个单独的线程调用。