自己语言理解的EventBus3.0 ,希望可以用简单的语言让你快速了解这个好用的东东!
总体来说 :EventBus3.0 说白了就是一个全局的静态常量EventBus.getDefault().
EventBus.getDefault().register(this);注册之后就放到一个List里边,
EventBus.getDefault().unregister(this); 注销之后就从list里边移除,
EventBus.getDefault().post(...);发送事件的时候通过4种threadMode方式执行(PostThread,MainThread,BackgroundThread,Async)。
展开细说分两部分:1.注册 注销 2.发送消息
1.注册
register(this)时
1.1 根据该订阅者类名 查找该订阅者所有事件响应函数
1.2 循环每个事件响应函数--得到该事件类型的所有订阅者信息,根据优先级别把自己插入到该事件的订阅者队列中subscriptionsByEventType
1.3 同理得到该订阅者所有事件队列,将该订阅者对象以及订阅的事件保存到 typesBySubscriber 里(方便后续注销操作).
1.4 如果接收sticky事件,立即分发sticky事件。
注销 unregister(this)逆向执行就可以了
通过typesBySubscriber来取出这个subscriber订阅者订阅的事件类型,subscriptionsByEventType里拿出这个事件类型的订阅者列表.取消订阅。
2.发送消息 .post()
首先从subscriptionsByEventType里获得所有订阅了这个事件的是订阅者列表,然后在通过postToSubscription()方法来分发事件,在postToSubscription()通过不同的threadMode在不同的线程里invoke()订阅者的方法
EventBus3.0 完整使用代码
这里只是 自己粗略语言的描述,想理解的更好 https://www.jianshu.com/p/f057c460c77e写的非常好,可以花时间慢慢嚼嚼,很有滋味的。
网友评论