public final class EventBus
extends java.lang.Object
EventBus是AndroidEventBus框架的核心类,也是用户的入口类.它存储了用户注册的订阅者信息和方法,
事件类型和该事件对应的tag标识一个种类的事件EventType
,每一种事件对应有一个或者多个订阅者Subscription
,订阅者中的订阅函数通过Subscriber
注解来标识tag和线程模型,这样使得用户体检较为友好,代码也更加整洁.
用户需要在发布事件前通过@register(Object)
方法将订阅者注册到EventBus中,EventBus会解析该订阅者中使用了
Subscriber
标识的函数,并且将它们以EventType
为key,以Subscription
列表为value存储在map中. 当用户post一个事件时通过事件到map中找到对应的订阅者,然后按照订阅函数的线程模型将函数执行在对应的线程中.
最后在不在需要订阅事件时,应该调用unregister(Object)
函数注销该对象,避免内存泄露!
例如在Activity或者Fragment的onDestory函数中注销对Activity或者Fragment的订阅.
注意 : 如果发布的事件的参数类型是订阅的事件参数的子类,订阅函数默认也会被执行。
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
|
org.simple.eventbus.EventBus.EventDispatcher |
getDispatcher() |
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)
发布事件
|
void |
postSticky(java.lang.Object event)
发布Sticky事件,tag为EventType.DEFAULT_TAG
|
void |
postSticky(java.lang.Object event,
java.lang.String tag)
发布含有tag的Sticky事件
|
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) |
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
- 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)
event
- public void postSticky(java.lang.Object event, java.lang.String tag)
event
- 事件tag
- 事件tagpublic void removeStickyEvent(java.lang.Class<?> eventClass)
public void removeStickyEvent(java.lang.Class<?> eventClass, java.lang.String tag)
eventClass
- 事件Class类型tag
- 事件tagpublic 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()
public org.simple.eventbus.EventBus.EventDispatcher getDispatcher()