自古英雄不问出处,奈何我却不是英雄!
转载请标明出处:http://blog.youkuaiyun.com/u011275767/article/details/51207811 本文出自:【程序员先生的博客】
先说一下为什么要写这个文章,网上也有讲解EventBus用法的,其实也很简单,而且也讲的也很透彻的,但是,但是,EventBus除了3.0!有了点变化。我在这里呢主要是讲一下3.0.与2.X的区别。
注册订阅者
//2.x版本的注册 EventBus.getDefault().register(this); // 注册普通事件 EventBus.getDefault().register(this, 100); // 注册带有优先级的普通事件 EventBus.getDefault().registerSticky(this); // 注册粘性事件 EventBus.getDefault().registerSticky(this, 100); // 注册带有优先级的粘性事件 //3.0版本的注册 EventBus.getDefault().register(this);能够看到还是简化了很多,那么2.x之前的四种注册方式是都没有了么,那怎么区分呢,我们下面会在响应事件部分讲到。
发送事件
EventBus.getDefault().post("XXXX"); EventBus.getDefault().postSticky("XXXX");发送事件没有变化都是通过post postStrcky来发送
响应事件
//2.x版本 public void onEvent(String str) { } public void onEventMainThread(String str) { } public void onEventBackgroundThread(String str) { } //3.0版本 @Subscribe(threadMode = ThreadMode.BACKGROUND, sticky = true, priority = 1) public void test(String str) { }2.X版本是通过以onEvent开头的方法来接受事件,通过onEventMainThread和onEventBackgroundThread来区分响应事件的线程。3.0版本不需要以onEvent方法开头,而是通过@Subscribe注解的方式,@Subscribe后面的括号中的参数就是我们在注册事件中说到的粘性事件,优先级事件问题。 通过thredMode 来确定运行的线程
public enum ThreadMode { /** * 当前发布线程 */ POSTING, /** * 主线程 */ MAIN, /** * 后台线程 */ BACKGROUND, /** * 异步线程(独立于发布线程和主线程) */ ASYNC }
解除注册
EventBus.getDefault().unregister(this);解除注册的方式两个版本也相同。
至此3.0版本与以前版本的却别就说完了。希望对大家有用!