EventBus是针对Android的发布/订阅事件总线,可以很好的实现各个组件之间的通信,并且提高了代码的可读性和简洁性,
可有效降低消息发布者和订阅者之间的耦合性。
下面让我们一起谈论一下EventBus如何在项目中去使用:
compile 'de.greenrobot:eventbus:3.0.0-beta1'
EventBus.getDefault().post(new EventMessage(message));
EventBus.getDefault().register(this);
@Subscribe(threadMode = ThreadMode.PostThread) public void setMessage(Message message){ if (message!=null){ messageBtn.setText(message.getEventMessage()); } } 注意:1.在3.0之前 EventBus还并没有使用注解的方式,消息的处理只限定于onEvent、onEventMainThread、 onEventBackgroundThread、onEventAsync,它们分别代表四中不同的线程模型。而在3.0之后,消息处理的 方法可随便取名,但需要添加注解@Subscribe,并且需要指定线程的模式(默认是PostThread); 2.事件处理函数的访问权限必须为public,否则会报错。
EventBus.getDefault().unregister(this);
到此完整的发布-订阅事件就结束了,是不是很简洁的就实现了。
在EventBus的事件处理函数中需要指定线程的模型,即指定事件处理函数运行所在线程。
PostThread:发布事件和处理事件在同一线程中,在线程模型中避免执行耗时的操作,避免事件传递过程中引起ANR;
MainThread:不论事件在哪个线程中发布,都会在UI线程中处理事件,更新UI操作,单不能执行耗时的操作;
BackgroundThread:如果事件是在主线程发布的,那么该事件处理函数就会在新的线程中执行,如果事件是在子线程中发布,
那么事件直接该线程中执行,此事件处理函数避免进行UI的更新;
Async:不论是在哪个事件发布事件,都会在新的线程中处理事件,此事件处理函数中同样避免进行UI的更新。