EventBus是一款针对Android优化的发布/订阅事件总线。简化了应用程序内各组件间、组件与后台线程间的通信。优点是开销小,代码更优雅,以及将发送者和接收者解耦。如果Activity和Activity进行交互还好说,如果Fragment和Fragment进行交互着实令人头疼,我们会使用广播来处理,但是使用广播稍显麻烦并且效率也不高,如果传递的数据是实体类需要序列化,那么很显然成本会有点高。今天我们就来学习下EventBus3.0的使用方法。
EventBus有三个主要的元素需要我们先了解一下:
EventBus3.0有以下四种ThreadMode:
EventBus使用起来很简单,分为五个步骤:
1.自定义一个事件类
2.在需要订阅事件的地方注册事件
3.发送事件
4.处理事件
5.取消事件订阅
上面讲到了基本用法,有的同学可能还是有点晕,这里举一个例子来应用EventBus3.0。
Android Studio 配置gradle:
MainActivity中注册和取消订阅事件(MainActivity.Java):
这里我们的ThreadMode设置为MAIN,事件的处理会在UI线程中执行,用TextView来展示收到的事件消息:
这里创建了SecondActivity来发布消息:
好了运行程序,我们看到MainActivity的TextView显示MainActivity字样:
接下来我们点击按钮进入SecondActivity并点击该界面中的发送事件按钮,这时SecondActivity被finish掉,MainActivity的TextView显示”欢迎关注刘望舒的博客”:
———>
除了上面讲的普通事件外,EventBus还支持发送黏性事件,就是在发送事件之后再订阅该事件也能收到该事件,跟黏性广播类似。为了验证粘性事件我们修改以前的代码:
在MainActivity中我们将注册事件添加到button的点击事件中:
在MainActivity中新写一个方法用来处理粘性事件:
在SecondActivity中我们定义一个Button来发送粘性事件:
好了运行代码再来看看效果,首先我们在MainActivity中并没有订阅事件,而是直接跳到SecondActivity中点击发送粘性事件按钮,这时界面回到MainActivity,我们看到TextView仍旧显示着MainActivity的字段,这是因为我们现在还没有订阅事件。
—————–>
接下来我们点击订阅事件,TextView发生改变显示“粘性事件”,大功告成。
EventBus3.0的使用就暂时分析到这,不明白的同学可以下载源码来研究下,源码地址可以查看原文链接,下一讲将讲解EventBus3.0的源码。