EventBus简要分析

2017-02-12  本文已影响0人  Tonki

register()

  1. 获取当前注册对象Object的所有注册方法SubscriberMethod
  2. 将当前注册对象Object和每个注册方法单独封装为Subscription类
  3. 将注册事件EventType和CopyOnWriteArrayList<Subscription>列表以Map形式存放 subscriptionsByEventType
  4. 将注册对象Object和其注册事件列表List<class<?>> 以Map存放 typesBySubscriber(关联注册对象和event)

post()

  1. 一个线程有一个PostingThreadState,内含事件队列
  2. 事件加入线程的事件队列List<Object>中
  3. 对每个事件执行postSingleEvent(Object event, PostingThreadState postingState)

ps:
同线程中post()操作是按队列来的,这样前一个subscriber耗时操作会影响后一个?

postSingleEvent()

  1. 获取事件的类型
  2. 根据类型找到其类内部的所有父类和接口放入List中
  3. 对List中内容,遍历执行postSingleEventForEventType()

postSingleEventForEventType()

  1. 根据EventType 得到Subscriptions
  2. 遍历Subscription执行postToSubscription()

postToSubscription()

  1. 根据threadMode 放入队列中或直接调用方法subscriberMethod
上一篇 下一篇

猜你喜欢

热点阅读