EventBus简要分析

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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 原文链接:http://blog.csdn.net/u012810020/article/details/7005...
    tinyjoy阅读 578评论 1 5
  • 先吐槽一下博客园的MarkDown编辑器,推出的时候还很高兴博客园支持MarkDown了,试用了下发现支持不完善就...
    Ten_Minutes阅读 593评论 0 2
  • 项目到了一定阶段会出现一种甜蜜的负担:业务的不断发展与人员的流动性越来越大,代码维护与测试回归流程越来越繁琐。这个...
    fdacc6a1e764阅读 3,237评论 0 6
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,107评论 19 139
  • title: EventBus 源码分析date: 2017-09-15 09:38:14tags: [Sourc...
    Passon_Fang阅读 239评论 0 0