- 设计思想
注解反射方式实现的事件发送订阅总线,APT索引加速,消息池复用
- 使用场景
代码解耦
- API模型
EventBus
默认单例,配置建造
观察者注册、注销及查询
事件(含黏性)发送、取消、清理、查询
日志工具
EventBusBuilder
日志工具的注入,开关配置
线程池配置
事件发送配置
索引的添加及忽略
默认EventBus实例
建造
@Subscribe
订阅者mark配置,主要用途,方法定位、线程模式、订阅事件类型
Logger
java,SystemOut,Android(由eventbus-android注入)
SubscriberMethod.ThreadMode(POSTING|MAIN|MAIN_ORDERED|BACKGROUND|ASYNC)
EventBusException
- 架构设计
EventBus 核心
eventbus-android 事件转主线程订阅处理
EventBusAnnotationProcessor APT生成订阅方法信息索引,比反射获取性能高
... 测试代码,索引
- 设计模式
观察者模式
建造者模式
单例模式
生产者消费者模式
- 线程模型
SubscriberMethod.ThreadMode(POSTING|MAIN|MAIN_ORDERED|BACKGROUND|ASYNC)
EventBus.postToSubscription 事件数据在线程中的流转逻辑
- 时序流程
APT建立订阅者信息索引
1、不同平台编译配置项配置
.在不同平台(java-library,android,tashs)gradle插件下的配置
.编译配置项eventBusindex(主要用于指定生成索引类名)
2、注解处理器中,读取编译配置项
3、注解处理器中,订阅者方法信息索引建立
.收集订阅者方法及注解信息
.按类-订阅方法(方法名-参数类)关系建立索引
.将注解信息逐行写入指定文件
索引方式取到订阅方法(addIndex+register)
.添加索引到EventBus实例
.注册订阅者过程,查找用索引方式,查询结果用对象池
.其它流程与反射订阅方式共用
反射方式取到订阅方法(register)
.缓存订阅
消息发送处理过程(post)
.支持消息继承关系
.根据消息类型找到对应类型的订阅
.消息从当前线程转到订阅线程中处理
事件切换线程
.Post线程 发送消息线程(主线程或子线程)
.HandlerPoster 主线程
.AsyncPoster 线程池线程,不等待
.BackgroundPoster 线程池线程,1s等待
消息对象池
PendingPost事件池,HandlerPoster、AsyncPoster、BackgroundPoster复用
消息下发反射调用
略