EventBus
项目地址:https://github.com/greenrobot/EventBus
EventBus
是一个Android
实现的publish/subscribe
消息总线,简化了应用程序内各组件间、组件与后台线程间的通信。 比如请求网络,等网络返回时通过Handler
或Broadcast
通知UI
, 两个Fragment
之间需要通过Listener通信,这些需求都可以通过EventBus
实现。
作为一个消息总线,有三个主要的元素:Event
、Subscriber
、Publisher
。
事件。Event
可以是任意类型的对象。
事件发布者,用于通知Subscriber
有事件发生。
发布事件:
EventBus.getDefault().post(event);
事件订阅者,接收特定的事件。
订阅者需要事先注册,注册之后,发布者发送的事件才会被订阅者接收。
注册订阅者的函数有很多种重载形式,这些函数的签名如下:
public void register(Object subscriber)
public void register(Object subscriber, int priority)
public void registerSticky(Object subscriber)
public void registerSticky(Object subscriber, int priority)
使用示例:
EventBus.getDefault().register(this);
有时候,事件被处理完之后,可能不需要再处理了,需要取消:
EventBus.getDefault().unregister(this);
EventBus
使用约定来指定事件处理函数以简化使用。即所有的事件处理函数以onEvent开头,具体来说,事件处理函数签名如下:
public void onEvent(Object event)
public void onEventMainThread(Object event)
public void onEventBackgroundThread(Object event)
public void onEventAsync(Object event)
处理事件到底应该使用哪个函数,与ThreadMode
有关。ThreadMode
有如下四类:
根据事件处理函数名称的不同,会使用不同的ThreadMode
,比如在后台线程加载了数据想在UI线程显示,订阅者只需把函数命名为onEventMainThread即可。