public final class EventBus
extends java.lang.Object
EventBus是AndroidEventBus框架的核心类,也是用户的入口类.它存储了用户注册的订阅者信息和方法,
事件类型和该事件对应的tag标识一个种类的事件EventType
,每一种事件对应有一个或者多个订阅者Subscription
,订阅者中的订阅函数通过Subscriber
注解来标识tag和线程模型,这样使得用户体检较为友好,代码也更加整洁.
用户需要在发布事件前通过@register(Object)
方法将订阅者注册到EventBus中,EventBus会解析该订阅者中使用了
Subscriber
标识的函数,并且将它们以事件类型为key,以Subscription
列表为value存储在map中. 当用户post一个事件时通过事件到map中找到对应的订阅者,然后按照订阅函数的线程模型将函数执行在对应的线程中.
最新版的EventBus使用弱引用只有订阅者,因此不需要手动调用unregister(Object)
函数注销该对象。
例如在Activity或者Fragment的onDestory函数中注销对Activity或者Fragment的订阅.
注意 : 如果发布的事件的参数类型是订阅的事件参数的子类,订阅函数默认也会被执行。例如你在订阅函数中订阅的是Activity类型的事件,
但是在发布时发布的是MainActivty的事件,而MainActivity继承自Activity,因此这种情况下订阅函数也会被执行。
如果你需要订阅函数能够接收到的事件类型必须严格匹配 ,你可以构造一个EventBusConfig对象,
然后设置MatchPolicy然后在使用事件总线之前使用该EventBusConfig来初始化事件总线.
EventBusConfig config = new EventBusConfig();
config.setMatchPolicy(new StrictMatchPolicy());
EventBus.getDefault().initWithConfig(config);
Constructor and Description |
---|
EventBus(java.lang.String desc)
constructor with desc
|
Modifier and Type | Method and Description |
---|---|
void |
clear()
clear the events and subcribers map
|
static EventBus |
getDefault() |
java.lang.String |
getDescriptor()
get the descriptor of EventBus
|
java.util.Queue<EventType> |
getEventQueue()
获取等待处理的事件队列
|
java.util.List<EventType> |
getStickyEvents() |
java.util.Map<EventType,java.util.concurrent.CopyOnWriteArrayList<Subscription>> |
getSubscriberMap()
返回订阅map
|
void |
post(java.lang.Object event)
post a event
|
void |
post(java.lang.Object event,
java.lang.String tag)
post event with tag
|
void |
postSticky(java.lang.Object event) |
void |
postSticky(java.lang.Object event,
java.lang.String tag) |
void |
register(java.lang.Object subscriber)
register a subscriber into the mSubcriberMap, the key is subscriber's
method's name and tag which annotated with
Subscriber , the value is
a list of Subscription. |
void |
registerSticky(java.lang.Object subscriber)
以sticky的形式注册,则会在注册成功之后迭代所有的sticky事件
|
void |
removeStickyEvent(java.lang.Class<?> eventClass) |
void |
removeStickyEvent(java.lang.Class<?> eventClass,
java.lang.String tag)
移除Sticky事件
|
void |
setAsyncEventHandler(EventHandler handler)
设置执行在异步线程的事件处理器
|
void |
setMatchPolicy(MatchPolicy policy)
设置订阅函数匹配策略
|
void |
setPostThreadHandler(EventHandler handler)
设置执行在post线程的事件处理器
|
void |
setUIThreadEventHandler(EventHandler handler)
设置执行在UI线程的事件处理器
|
void |
unregister(java.lang.Object subscriber)
Deprecated.
|
public EventBus(java.lang.String desc)
desc
- the descriptor of eventbuspublic static EventBus getDefault()
public void register(java.lang.Object subscriber)
Subscriber
, the value is
a list of Subscription.subscriber
- the target subscriberpublic void registerSticky(java.lang.Object subscriber)
subscriber
- @Deprecated public void unregister(java.lang.Object subscriber)
subscriber
- public void post(java.lang.Object event)
event
- public void post(java.lang.Object event, java.lang.String tag)
event
- 要发布的事件tag
- 事件的tag, 类似于BroadcastReceiver的actionpublic void postSticky(java.lang.Object event)
public void postSticky(java.lang.Object event, java.lang.String tag)
public void removeStickyEvent(java.lang.Class<?> eventClass)
public void removeStickyEvent(java.lang.Class<?> eventClass, java.lang.String tag)
eventClass
- 事件的类型tag
- 事件的ttagpublic java.util.List<EventType> getStickyEvents()
public void setMatchPolicy(MatchPolicy policy)
policy
- 匹配策略public void setUIThreadEventHandler(EventHandler handler)
handler
- public void setPostThreadHandler(EventHandler handler)
handler
- public void setAsyncEventHandler(EventHandler handler)
handler
- public java.util.Map<EventType,java.util.concurrent.CopyOnWriteArrayList<Subscription>> getSubscriberMap()
public java.util.Queue<EventType> getEventQueue()
public void clear()
public java.lang.String getDescriptor()