EventBus简要分析

register()

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

post()

  1. 一个线程有一个PostingThreadState,内含事件队列
  2. 事件加入线程的事件队列List
  3. 对每个事件执行postSingleEvent(Object event, PostingThreadState postingState)
  4. ps:
    同线程中post()操作是按队列来的,这样前一个subscriber耗时操作会影响后一个?

    postSingleEvent()

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

    postSingleEventForEventType()

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

    postToSubscription()

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

    你可能感兴趣的:(EventBus简要分析)