EventBus的使用(非常好用,非常简单,大道至简)

用于组件间的通讯,进程间的通讯,线程间的通讯,无所不能的通讯
事件发布订阅总线,原理:2.x使用反射机制影响性能;3.0使用EventBusAnnotationProcessor注解处理器在编译期通过读取@Subscribe()注解并解析、处理其中所包含的信息,然后生成java类来保存所有订阅者关于订阅的信息,这样就比在运行时使用反射来获得这些订阅者的信息速度要快

用法:
1创建对象
public static class MessageEvent { /* Additional fields if needed */ }
2发送对象:EventBus.getDefault().post(new MessageEvent());
3接收对象:
@Subscribe(threadMode = ThreadMode.MAIN)
public void onMessageEvent(MessageEvent event) {/* Do something */};
PS能够接收对象的前提的是已经在接收事件的类里注册,当然也不要忘记解注册
@Override
public void onStart() {
super.onStart();
EventBus.getDefault().register(this);
}

@Override
public void onStop() {
super.onStop();
EventBus.getDefault().unregister(this);
}
在gradle中 添加compile就不说了
compile ‘org.greenrobot:eventbus:3.1.1’
对于的解释:threadMode
EventBus的@Subscribe订阅的线程有四种模式:
1Thread.PostThread默认方式,在发送这post线程中执行【常用】(发送者是主线程订阅者就是主线程,发送者post是子线程订阅者Subscribe就是子线程)
2ThreadMode.MainThread 在主线程(UI线程)中执行【常用】(跟发送者post无关,订阅者subscribe都是在主线程中执行)
3ThreadMode.BackGroundThread在子线程(后台线程)中执行(如果事件在主线程发布则new一个子线程执行,如果事件在子线程中发布则在当前子线程中执行)
4ThreadMode.Async强制在后台执行(无论事件在哪个线程发布,都会new一个子线程执行)
拓展:
EventBus 3.0 函数名字不再受到权限,而且可以在一个函数中体现出在哪个线程执行,并且可指定接收事件的优先级

/**
* 普通事件
* @param event
*/
@Subscribe(threadMode = ThreadMode.MAIN, priority = 100)
public void onDataSynEvent(DataSynEvent event) {

}

/**
 * 粘性事件
 * @param event
 */
@Subscribe(threadMode = ThreadMode.MAIN, priority = 100, sticky = true) 
public void onDataSynEvent(DataSynEvent event) {

}

你可能感兴趣的:(Android,win10)