版本:
eventbus-3.0.0
引入依赖:
implementation 'org.greenrobot:eventbus:3.1.1'
使用:
注册:
EventBus.getDefault().register(Context context);
取消注册:
if (EventBus.getDefault().isRegistered(this)) {
EventBus.getDefault().unregister(this);
}
发送消息:
EventBus.getDefault().post(message);
参数:
参数可以为类
示例:
//传入的参数为任意数据类型
public class EventMsg<T> {
public String msg;
//数据类型为任意数据类型
public T data;
}
接收消息:
在方法上定义注解:
@Subscribe(threadMode = ThreadMode.MAIN)
接收者的参数类型必须要和发送消息传入的一致,否则收不到消息
示例:
@Subscribe(threadMode = ThreadMode.MAIN)
public void onEvent(EventMsg message) {
switch (message.getMsg()) {
case SellProduct.ADD_PRODUCT:
productDialog.dismiss();
break;
}
}
ThreadMode取值:
* ThreadMode.ASYNC 是一个异步任务
* ThreadMode.BACKGROUND 是一个后台任务
* ThreadMode.MAIN 不管任何时候 都在主线程执行操作
* ThreadMode.POSTING 取订阅方式的当前线程
粘性事件:
就是在发送事件之后再订阅该事件也能接收到该事件,使用EventBus的postSticky方法发送黏性事件
接收消息:
在方法上定义注解:
@Subscribe(threadMode = ThreadMode.MAIN,sticky = true)
发送事件:
EventBus.getDefault ().postSticky (message);
取消指定已经发送过的粘性事件:
EventBus.getDefault().removeStickyEvent(message);
取消所有粘性事件:
EventBus.getDefault ().removeAllStickyEvents ();