EventBus简要分析
2017-02-12 本文已影响0人
Tonki
register()
- 获取当前注册对象Object的所有注册方法SubscriberMethod
- 将当前注册对象Object和每个注册方法单独封装为Subscription类
- 将注册事件EventType和CopyOnWriteArrayList<Subscription>列表以Map形式存放
subscriptionsByEventType
- 将注册对象Object和其注册事件列表List<class<?>> 以Map存放
typesBySubscriber
(关联注册对象和event)
post()
- 一个线程有一个PostingThreadState,内含事件队列
- 事件加入线程的事件队列List<Object>中
- 对每个事件执行
postSingleEvent(Object event, PostingThreadState postingState)
ps:
同线程中post()操作是按队列来的,这样前一个subscriber耗时操作会影响后一个?
postSingleEvent()
- 获取事件的类型
- 根据类型找到其类内部的所有父类和接口放入List中
- 对List中内容,遍历执行postSingleEventForEventType()
postSingleEventForEventType()
- 根据EventType 得到Subscriptions
- 遍历Subscription执行
postToSubscription()
postToSubscription()
- 根据threadMode 放入队列中或直接调用方法subscriberMethod