示例代码
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//注册AndroidEventBus
EventBus.getDefault().register(this);
//为了看着方便我们在注册后就发送了两个事件,我们可以在任意位置发送事件
//发送一个事件
EventBus.getDefault().post(new Event());
//发送一个标记事件
EventBus.getDefault().post(new Event(), "type");
}
/**
* 普通的事件监听方法
*/
@Subscriber
public void onEvent(Event event) {
Log.d("onEvent",event.event);
}
/**
* 指定事件监听方法执行的线程
*/
@Subscriber(mode = ThreadMode.MAIN)
public void onEventThreadMode(Event event) {
Log.d("onEventThreadMode",event.event);
}
/**
* 接收指定标记的事件
*/
@Subscriber(tag = "type")
public void onEventTag(Event event) {
Log.d("onEventTag",event.event);
}
@Override
protected void onDestroy() {
super.onDestroy();
//移除AndroidEventBus
EventBus.getDefault().unregister(this);
}
/**
* 要发送的事件,自己定义
*/
public class Event {
public String event = "接收事件";
}
}
添加依赖
compile ‘org.simple:androideventbus:1.0.5.1’
发送数据
发送数据不用注册AndroidEventBus的,可在任意位置直接调用下面的方法。
EventBus.getDefault().post( event);
可以发送的数据包括基本数据类型,可以是字符串,也可以是对象。
接收事件
1.注册eventbus(在各组件的创建的时候注册,如Activity的onCreat方法)
EventBus.getDefault().register(this);
2.取消注册(在各组件销毁的时候移除避免内存泄漏,如Activity的onDestroy方法)
EventBus.getDefault().unregister(this);
3.实现监听方法
通过方法中的参数区分不同的事件
@Subscriber
public void onEventSubscriber(Event event){
Log.d("eventbus.Subscriber",event.toString);
}
指定线程
默认执行在发送消息的线程
指定线程的方法 @Subscriber(tmode = ThreadMode.**)
ThreadMode是一个枚举类型。它的值如下:
POST: Subscriber在发布消息(调用post函数的线程,默认的线程)的线程中执行。
MAIN: Subscriber将在Android主线程中执行。
ASYNC: Subscriber在异步线程,也就是在独立的线程中执行。
指定事件的一个tag
如果我们要发送的事件被很多方法订阅了,而我们想指定一个或几个方法接收其他订阅方法不接收。这是我们就可以用到AndroidEventBus的一个特性为事件制定一个tag。
发送一个标记tag的事件
EventBus.getDefault().post(event,tag);
创建一个接收tag标记的事件
@Subscriber(tag = "设置的tag")
public void onEventSubscriber(String string){
Log.d("eventbus.Subscriber",string);
}
黏性事件
黏性事件:事件发出后在接收的事件(一般为先注册才能接收)。
发送一个黏性事件
EventBus.getDefault().postSticky(event);
注册黏性事件的监听(AndroidEventBus注册黏性事件是不用手动移除的)
EventBus.getDefault().registerSticky(this);
黏性事件的接收方法与非黏性事件的接收方法相同,黏性事件也支持更改线程和指定tag。与Eventbus的黏性事件不同,AndroidEventBus的黏性事件可以接收多个,接收后也不清除,所以接收后可以移除该事件。
移除黏性事件
EventBus.getDefault().removeStickyEvent(Event.class);
EventBus.getDefault().removeStickyEvent(Event.class,tag);
黏性事件示例
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.getDefault().postSticky(new Event(), "type");
//注册AndroidEventBus黏性事件的监听
EventBus.getDefault().registerSticky(this);
}
/**
* 普通的事件监听方法
*/
@Subscriber
public void onEvent(Event event) {
Log.d("onEvent", event.event);
//移除指定的黏性事件
EventBus.getDefault().removeStickyEvent(Event.class);
}
/**
* 指定事件监听方法执行的线程
*/
@Subscriber(mode = ThreadMode.MAIN)
public void onEventThreadMode(Event event) {
Log.d("onEventThreadMode", event.event);
}
/**
* 接收指定标记的事件
*/
@Subscriber(tag = "type")
public void onEventTag(Event event) {
Log.d("onEventTag", event.event);
//移除标记事件的黏性事件
EventBus.getDefault().removeStickyEvent(Event.class, "type");
}
@Override
protected void onDestroy() {
super.onDestroy();
//黏性事件是不用手动移除的
}
/**
* 要发送的事件,自己定义
*/
public class Event {
public String event = "接收事件";
}
}