EventBus运行流程
2018-04-26 17:46:47 8 举报
登录查看完整内容
EventBus运行流程图
作者其他创作
大纲/内容
直接在发布事件的线程中执行
按照订阅方法优先级插入订阅对象集合
是
否
findUseringInfo()
都在新建子线程中执行
EventBus运行流程
事件的发送
findUsingReflection()
从subscriptionsByEventType中获取subscriptions订阅对象集合
eventType事件类型
将subscriber对应的eventType从typesBySubscriber中移除
调用unregister()
通过eventType得到Subscriptions订阅对象集合
通过subscriber找到subscribedTypes事件类型集合
EventBus.getDefault()
EventBus实例
从stickyEvents事件保存队列中取出该类型事件发送给订阅者
subscriber订阅者,subscriberMethod订阅方法
通过反射直接运行
完成订阅方法注册
是否存在订阅方法集合的缓存
查找订阅者的订阅方法
通过订阅者获取subscribedEvents事件类型集合
遍历订阅方法完成注册工作
是否是黏性事件
移除Subscription订阅对象
提交事件线程是否为主线程
ignoreGeneratedIndex == true
选择何种方法查找
重新创建事件类型集合,并以订阅者为key保存到typesBySubscriber
订阅者注册
线程模式是否为MAIN
取出订阅方法的线程模式
订阅者取消注册
在发布事件的线程中处理事件
事件类型集合不为空
重新创建并保存在subscriptionsByEventType中(Map)
SubscriberMethodFinder.dindSubscriberMethods
将队列中事件依次交postingSingleEvent()处理,并移除事件
将eventType添加到subscribedEvents列表中
在新线程中执行事件
获取事件队列List,并将当前事件插入
BACKGROUND模式
获取EventBus实例
调用register()
使用mainThreadPoster将订阅事件添加到主线程队列
找到后加入缓存
单例+双重检查
调用subscribe()
返回订阅方法的集合
订阅对象集合不为空
线程模式是否为POSTING
调用post()
ASYNC模式
创建Subscription对象
0 条评论
回复 删除
下一页