2018-04-11

自己语言理解的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写的非常好,可以花时间慢慢嚼嚼,很有滋味的。

你可能感兴趣的:(2018-04-11)