自己語(yǔ)言理解的EventBus3.0 梭姓,希望可以用簡(jiǎn)單的語(yǔ)言讓你快速了解這個(gè)好用的東東辩恼!
總體來(lái)說(shuō) :EventBus3.0 說(shuō)白了就是一個(gè)全局的靜態(tài)常量EventBus.getDefault().
EventBus.getDefault().register(this);注冊(cè)之后就放到一個(gè)List里邊,
EventBus.getDefault().unregister(this); 注銷之后就從list里邊移除炼蛤,
EventBus.getDefault().post(...);發(fā)送事件的時(shí)候通過(guò)4種threadMode方式執(zhí)行(PostThread榛臼,MainThread,BackgroundThread勺鸦,Async)。
展開(kāi)細(xì)說(shuō)分兩部分:1.注冊(cè) 注銷 2.發(fā)送消息
1.注冊(cè)
register(this)時(shí)?
1.1?根據(jù)該訂閱者類名 查找該訂閱者所有事件響應(yīng)函數(shù)
1.2?循環(huán)每個(gè)事件響應(yīng)函數(shù)--得到該事件類型的所有訂閱者信息目木,根據(jù)優(yōu)先級(jí)別把自己插入到該事件的訂閱者隊(duì)列中subscriptionsByEventType
1.3?同理得到該訂閱者所有事件隊(duì)列换途,將該訂閱者對(duì)象以及訂閱的事件保存到?typesBySubscriber?里(方便后續(xù)注銷操作).
1.4?如果接收sticky事件,立即分發(fā)sticky事件。
注銷 unregister(this)逆向執(zhí)行就可以了
通過(guò)typesBySubscriber來(lái)取出這個(gè)subscriber訂閱者訂閱的事件類型,subscriptionsByEventType里拿出這個(gè)事件類型的訂閱者列表.取消訂閱刽射。
2.發(fā)送消息 .post()
首先從subscriptionsByEventType里獲得所有訂閱了這個(gè)事件的是訂閱者列表,然后在通過(guò)postToSubscription()方法來(lái)分發(fā)事件,在postToSubscription()通過(guò)不同的threadMode在不同的線程里invoke()訂閱者的方法
EventBus3.0 完整使用代碼
這里只是 自己粗略語(yǔ)言的描述军拟,想理解的更好?http://www.reibang.com/p/f057c460c77e寫(xiě)的非常好,可以花時(shí)間慢慢嚼嚼誓禁,很有滋味的懈息。