首先gradle中引入设计模式
compile 'org.greenrobot:eventbus:3.0.0'
EventBus经常使用的有三个函数框架
1.注册事件,注册过的类可以接受EventBus发出的消息事件.函数
EventBus.getDefault().register(this);
2.取消注册post
EventBus.getDefault().unregister(this);
3.发出消息,在任意一个活动或服务中调用该方法传递数据,全部注册过事件的类都能收到消息,参数为object类型,在事件处理函数中强制转换gradle
EventBus.getDefault().post("你好");
4.事件处理函数,在注册过EventBus的类中用该函数处理post传递的数据。函数名可为任意的,只需用注解声明(仅限于EventBus3.0,3.0开始支持注解,以前的版本函数为固定的几个函数),下面解释threadMode参数this
@Subscribe(threadMode = ThreadMode.MAIN) public void XXX(String str){ Log.d("LoginActivity",str); }
1.参数含义,threadMode共有4个参数,标识函数在哪一个地方运行,好比主线程或者子线程。spa
2.事件优先级。在相同的线程模式下,高优先级的订阅者将会比低优先级的订阅者更早接收到事件。EventBus默认的优先级是0,这样高优先级事件处理完时间后可使用cancelEventDelivery(object),阻断消息的传播。
注意:优先级不会影响不一样线程模式下的订阅者接收事件的顺序。线程
@Subscribe(threadMode = ThreadMode.MAIN,priority = 1)
public void XXX(object o){
//处理逻辑
//阻断传递
cancelEventDelivery(o);
}
简单的说粘性事件就是在发布粘性消息后,再在某个类中注册EventBus,声明一个粘性事件处理函数任然能够接收到以前发布的粘性事件。设计
1.发布事件,注意这里是postStickycode
EventBus.getDefault().postSticky("Hello everyone!");
2.注册Eventbus,和以前同样
EventBus.getDefault().register(this);
3.处理消息,注意在注解参数中声明:sticky:true,表示该事件可以接受粘性事件
@Subscribe(sticky = true, threadMode = ThreadMode.MAIN) public void onEvent(String event) { Log.d("EventBus",event); }