示例代码
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//为了看着方便我们将发送事件的方法与注册写在了一起,我们可以在任意位置发送事件
//发送黏性事件
EventBus.getDefault().postSticky(new Event());
//注册EventBus
EventBus.getDefault().register(this);
//发送一个事件
EventBus.getDefault().post(new Event());
}
/**
* 普通的事件监听方法
*/
@Subscribe
public void onEvent(Event event) {
Log.d("onEvent", event.event);
}
/**
* 指定事件监听方法执行的线程
*/
@Subscribe(threadMode = ThreadMode.MAIN)
public void onEventThreadMode(Event event) {
Log.d("onEventThreadMode", event.event);
}
/**
* 接收黏性事件(也可以接受非黏性事件,事件与方法中的参数相同即可)
*/
@Subscribe(sticky = true)
public void onEventSticky(Event event) {
Log.d("onEventSticky", event.event);
}
/**
* 指定优先级
*/
@Subscribe(priority = 80)
public void onEventPriority(Event event) {
Log.d("onEventPriority", event.event);
}
@Override
protected void onDestroy() {
super.onDestroy();
//移除EventBus
EventBus.getDefault().unregister(this);
}
/**
* 要发送的事件,自己定义
*/
public class Event {
public String event = "接收事件";
}
}
添加依赖
在项目的build.gradle文件中添加如下依赖:
compile ‘org.greenrobot:eventbus:3.0.0’
发送数据
EventBus.getDefault().post( event);
可以发送的数据包括基本数据类型,可以是字符串,也可以是对象。
取消事件的分发
EventBus.getDefault().cancelEventDelivery(event);//取消指定非黏性事件
EventBus.getDefault().removeAllStickyEvents();//取消全部的黏性事件
EventBus.getDefault().removeStickyEvent(Event.class);//取消指定的黏性事件
接收消息
1.注册eventbus(在各组件的创建的时候注册,如Activity的onCreat方法)
EventBus.getDefault().register(this);
2.取消注册(在各组件销毁的时候移除避免内存泄漏,如Activity的onDestroy方法)
EventBus.getDefault().unregister(this);
3.实现监听方法
通过方法中的参数区分接收方法
@Subscribe
public void onEvent(String string){
Log.d("EventBus", string +" 默认 " + Thread.currentThread().getName());
}
指定接收方法的线程
默认执行在发送消息的线程
指定线程的方法 @Subscribe(threadMode = ThreadMode.**)
ThreadMode是一个枚举类型。它的值如下:
POSTING: Subscriber在发布消息(调用post函数的线程,默认的线程)的线程中执行。
MAIN: Subscriber将在Android主线程中执行。
BACKGROUND: Subscriber在后台线程中执行
ASYNC: Subscriber在异步线程,也就是在独立的线程中执行。
指定接收方法的优先级
优先级的值为0~100 ,默认优先级为0。通过@Subscribe(priority = 80)指定优先级。
只有在同一个线程中的监听方法才有优先级的比较。
黏性事件
黏性事件就是能接收订阅前发送的事件,但是只能接收最新一次的粘性事件。
发送黏性事件EventBus.getDefault().postSticky(event)
通过设置@Subscribe(sticky = true)来接收黏性事件。默认不接收粘性事件的。
接受黏性事件的方法也可以接受非黏性事件。