你聽(tīng)過(guò)onClick 事件,onItemClick 事件,事件總線不一定聽(tīng)過(guò)吧, eventbus 事件總線也是一個(gè)編程思想,為什么要設(shè)計(jì)EventBus了,因?yàn)樗穷I(lǐng)域驅(qū)動(dòng)設(shè)計(jì)中比不可少的模塊,它承擔(dān)傳輸數(shù)據(jù)的作用,它可以解耦模塊之間的耦合性。 在android開(kāi)發(fā)過(guò)程中,我們總會(huì)遇到各個(gè)組件模塊之間的通信,當(dāng)功能點(diǎn)越來(lái)越多的時(shí)候,組件間的通信難免會(huì)變得混亂
我們還是已事例說(shuō)明為什么要用eventbus
Java代碼
Java代碼
Java代碼
說(shuō)了這么多一直沒(méi)說(shuō)重點(diǎn)下下面開(kāi)始
使用eventbus只需要在類(lèi)中注入一個(gè)eventbus單例接口(IOC的知識(shí)請(qǐng)先看前面的文檔)
Java代碼
然后我們可以在需要監(jiān)聽(tīng)事件的地方
Java代碼
這樣就可以注冊(cè)事件監(jiān)聽(tīng)了 發(fā)布事件 Java代碼
取消監(jiān)聽(tīng) Java代碼
上面是事件監(jiān)聽(tīng)和發(fā)布的基本模式
注意,我們的監(jiān)聽(tīng)是有延時(shí)的,就是說(shuō)registerListener時(shí),eventbus會(huì)將之前發(fā)布的事件觸發(fā)一下 ,也就是說(shuō)你先f(wàn)ireEvent,然后在registerListener也是可以監(jiān)聽(tīng)到事件的 有人可能會(huì)問(wèn)為什么會(huì)這樣設(shè)計(jì) 因?yàn)槲蚁M?A 頁(yè)面中,在onResume中我們注冊(cè)事件,在onStop中我們?nèi)∠O(jiān)聽(tīng) 如果你要清空你注冊(cè)事件之前發(fā)布的事件可以
Java代碼
問(wèn)題2解決,只需要在service中發(fā)布事件,在你有關(guān)的頁(yè)面,監(jiān)聽(tīng)事件就行 問(wèn)題3解決, 先注冊(cè)一個(gè)監(jiān)聽(tīng)器,事件發(fā)布時(shí)網(wǎng)絡(luò)獲取用戶(hù)信息,當(dāng)用戶(hù)更新頭像后,發(fā)布一下事件就行
下面是用注解實(shí)現(xiàn)
Java代碼
注解name參數(shù),事件名,ui是否在ui線程,onBefore=true,可以監(jiān)聽(tīng)事件監(jiān)聽(tīng)前的事件
當(dāng)然使用這個(gè)注解還需要
Java代碼
|
|
來(lái)自: aaie_ > 《Android學(xué)習(xí)筆記》