导读:
继续提升自己技术吧,今天给大家带来的是EventBus3的初探学习.
EventBus简介:
EventBus 是一款针对Android端优化的发布/订阅消息总线,它简化了应用程序内各组件间、组件与后台线程间的通信.其主要功能是用来替代传统的Intent、Handler、BroadCast,在Fragment、Activity、Service以及线程之间来传递消息.避免复杂和易出错的依赖和生命周期问题
EventBus框架流程图:
- 根据图片可见框架是观察者设计模式设计的
- Publisher 是发布者,通过 post()方法将消息事件Event发布到事件总线
- EventBus 是事件总线,遍历所有已经注册事件的订阅者们,找到里边的onEvent等4个方法,分发Event
- Subscriber是订阅者,收到事件总线发下来的消息.即onEvent方法被执行.注意参数类型必须和发布者发布的参数一致.
EventBus使用:
一. 添加依赖:
//AS的道友,在Gradle
compile 'org.greenrobot:eventbus:3.0.0'
//eclipse的把项目下载下来,EventBus为项目源码,自行打包成jar包或者Library库,这里就不作说明了
二. 定义事件bean类(直接传不定义也行)
public static class MessageEvent {
/* Additional fields if needed */
}
三. 定义订阅者,注意要在生命周期方法注册/反注册EventBus
//这里的onMessageEvent可以自定义名字,注意加上上面的注解
@Subscribe(threadMode = ThreadMode.MAIN)
public void onMessageEvent(MessageEvent event) {
/* Do something */
};
------------------分割线--------------------
@Override
public void onStart() {
super.onStart();
EventBus.getDefault().register(this);
}
@Override
public void onStop() {
super.onStop();
EventBus.getDefault().unregister(this);
}
四. 在要发送事件的定义Post
EventBus.getDefault().post(new MessageEvent());
简单介绍下EventBus中的四种ThreadMode
POSTING
默认模式,事件在哪个线程Post出来,处理函数就在哪个线程中运行(这个模式需要避免主线程处理耗时操作,防止ANR)
MAIN
事件的处理函数会在UI线程中执行,同理不能执行耗时操作,防止ANR
BACKGROUND
如果Post不是在主线程,那么处理函数会直接在发布事件的线程中执行,如果在Post在主线程,那么处理函数会在新的线程中运行,即–>不管Post在哪个线程,处理函数不能在UI线程中执行
ASYNC
无论Post在哪个线程,处理函数都会通过线程池新建子线程执行,处理函数不能在UI线程中操作,这个模式一般用来执行耗时操作
总结:
这篇文章只是小试牛刀,后续补上使用Demo,以及源码分析