实用过EventBus的人都知道,这个轻量简便的lib真的很好用,耦合度低,
能满足很多场合的使用,不过3.0貌似更好用了,使用也更灵活了。下面给出
官方的使用地址,大家可以去官网了解熟悉下,EventBus3.0.
Event的使用,3.0引入管擦着模式,Subscriber:事件订阅者,在EventBus3.0
之前消息处理的方法只能限定于onEvent、onEventMainThread、onEventBackgr
oundThread和onEventAsync,他们分别代表四种线程模型。而在EventBus3.0之后
,事件处理的方法可以随便取名,但是需要添加一个注解@Subscribe,并且要指定
线程模型(默认为POSTING),四种线程模型下面会讲到。
EventBus3.0线程模式
POSTING(默认):如果使用事件处理函数指定了线程模型为POSTING,那么该事
件在哪个线程发布出来的,事件处理函数就会在这个线程中运行,也就是说发布事件和
接收事件在同一个线程。在线程模型为POSTING的事件处理函数中尽量避免执行耗时操
作,因为它会阻塞事件的传递,甚至有可能会引起ANR。
MAIN:事件的处理会在UI线程中执行。事件处理时间不能太长,长了会ANR的。
BACKGROUND:如果事件是在UI线程中发布出来的,那么该事件处理函数就会在
新的线程中运行,如果事件本来就是子线程中发布出来的,那么该事件处理函数直接在
发布事件的线程中执行。在此事件处理函数中禁止进行UI更新操作。
ASYNC:无论事件在哪个线程发布,该事件处理函数都会在新建的子线程中执行,
同样,此事件处理函数中禁止进行UI更新操作。
四种线程,大家可以根据需要对线程进行控制,线程模式是的EventBus使用起来更
加灵活,选择性也更多。说了这么多没用的 下面个大家介绍下到底怎么用
使用之前,需要先在gradle中添加
//EventBus
compile'org.greenrobot:eventbus:3.0.0'
主要方法 事件订阅,也就是之前的注册 EventBus.getDefault().register(this);
取消订阅 EventBus.getDefault().unregister(this);
事件发送 EventBus.getDefault().post(messageEvent);
事件接收 @Subscribe(threadMode=ThreadMode.MAIN)
public void onMessageEvent(PostEventevent) {}
粘性事件 EventBus.getDefault().postSticky() (粘性事件是发送后再订阅,
异于普通事件)
用法 创建一个java类 public class PostEvent{/** 类的名字没有局限性,可以随意定
义 */} EventBus.getDefault().post(new PostEvent()) 这个时候 ,就可以在需
要的地方发送事件了 onMessageEvent 可以用来接收所发送的事件
下面给出我的代码截图
代码很简单,这里我没有使用粘性事件。上面是根据官方接收的使用方法来实现的
,不过既然是防踩坑,好像跑题了,下面给大家讲解我遇到的情况。
A。
官网上说的是要在onStart()中进行订阅,在onStop()中进行取消定语,单貌似这样在
Activity中是行不通的,这样无法接收到事件。熟悉Activity生命周期的都应该知道为什么
吧,这里不再赘述,个人建议,事件订阅放在onCreate()方法中,而注销,要放在onD
estory()中。
B。之前查阅的时候,有人说EventBus3.0要处理不同场所发出的事件的时候要写不同的
java类,这养就要写很多的java事件类,请注意看我上面写的PostEvent类(可根据需
要,自行进行扩展),在这个类中我定义了三个 变量 tag(事件标签 、代号) what(事件
类型,不同事件对应不同类型)event (事件内容)。这样就不需要对应的事件写不同的
java类了,而且,如果写了那么多类,你分得清楚你接收的是哪个java类么?无形中不是
给自己增加了麻烦吗?
不知道上面的两个问题 ,大家有没有遇到呢?
总结:1.使用之前,需要先下载,compile'org.greenrobot:eventbus:3.0.0'加到gradle
中
2. 使用常规的订阅及解订阅方式,在需要的地方发送事件,事件类根据自己需
要自行定义
3. 在需要的地方调用 onMessageEvent进行事件接收(订阅过事件一定要解除
订 阅,并且 订阅过事件后必须调用onMessageEvent()方法),不要忘了注
解@Subscribe(threadMode=ThreadMode.MAIN) 线程根据需要自己切换
以上为笔者愚见,并且在使用过程中遇到的问题处理方式,工具都是怎么简单怎么
来,易于维护才是王道,当然每个人都有自己得使用心得,适合自己得,才是最好的。
下面给出源码,需要的可以下载看看 http://download.csdn.net/download/qq_27234017/9990752