EventBus - (觀察者模式) 消息發(fā)布訂閱類庫

1拌阴,簡介

1)EventBus實(shí)現(xiàn)了觀察者模式性雄,是Google.Guava提供的消息發(fā)布-訂閱類庫留拾。
2)Multimap:guava用于存儲因篇,一個key可以對應(yīng)多個值的類泞辐。
底層使用private transient Map<K, Collection<V>> map;來實(shí)現(xiàn)。
3)Eventbus處理所有的事件都以串行的方式惜犀。
4)AsyncEventBus铛碑,AsyncEventBus類提供了與EventBus相同的功能,但是使用了java.util.concurrent.executor實(shí)例來進(jìn)行方法的異步處理虽界。

2汽烦,注冊過程

1)使用SubscriberFindingStrategy 找到listener所有被@Subscribe修飾的方法。并構(gòu)造成EventSubscriber莉御,包含目標(biāo)對象和方法撇吞,用于反射調(diào)用俗冻。放入Multimap<Class<?>, EventSubscriber>中.

image.png

2)Multimap<Class<?>, EventSubscriber>是以參數(shù)event的Class類型作為key。
image.png

3)將不同Listener生成的multimap放入subscribersByType的SetMultimap中牍颈。
image.png

3迄薄,發(fā)布過程。

1)根據(jù)eventType獲取所有的Set<EventSubscriber>wrappers讥蔽。
2)如果wrappers不為空,就將dispatched設(shè)置為true画机。

image.png

3)將每一個wrapper放入當(dāng)前線程的eventToDispatch隊列冶伞。
image.png

4)dispatchQueuedEvents發(fā)布消息。
從當(dāng)前線程取出Queue<EventWithSubscriber> events,while循環(huán)dispatch消息帽芽。
image.png

4删掀,調(diào)用流程

1)創(chuàng)建一個事件總線。

image.png

2)注冊訂閱者到EventBus
image.png

3)發(fā)布消息导街,分發(fā)消息
image.png

將所有觀察者入隊enqueueEvent到當(dāng)前線程的ThreadLocal<Queue<EventWithSubscriber>>披泪,設(shè)置dispatched = true
image.png

4)while循環(huán),下發(fā)消息到每一個觀察者dispatchQueuedEvents()
image.png

5)使用反射處理搬瑰,調(diào)用方法款票,傳入event參數(shù)
image.png

image.png

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末控硼,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子艾少,更是在濱河造成了極大的恐慌卡乾,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,366評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件缚够,死亡現(xiàn)場離奇詭異幔妨,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)谍椅,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,521評論 3 395
  • 文/潘曉璐 我一進(jìn)店門误堡,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人毯辅,你說我怎么就攤上這事埂伦。” “怎么了思恐?”我有些...
    開封第一講書人閱讀 165,689評論 0 356
  • 文/不壞的土叔 我叫張陵沾谜,是天一觀的道長。 經(jīng)常有香客問我胀莹,道長基跑,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,925評論 1 295
  • 正文 為了忘掉前任描焰,我火速辦了婚禮媳否,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘荆秦。我一直安慰自己篱竭,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,942評論 6 392
  • 文/花漫 我一把揭開白布步绸。 她就那樣靜靜地躺著掺逼,像睡著了一般。 火紅的嫁衣襯著肌膚如雪瓤介。 梳的紋絲不亂的頭發(fā)上吕喘,一...
    開封第一講書人閱讀 51,727評論 1 305
  • 那天,我揣著相機(jī)與錄音刑桑,去河邊找鬼氯质。 笑死,一個胖子當(dāng)著我的面吹牛祠斧,可吹牛的內(nèi)容都是我干的闻察。 我是一名探鬼主播,決...
    沈念sama閱讀 40,447評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼蜓陌!你這毒婦竟也來了觅彰?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,349評論 0 276
  • 序言:老撾萬榮一對情侶失蹤钮热,失蹤者是張志新(化名)和其女友劉穎填抬,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體隧期,經(jīng)...
    沈念sama閱讀 45,820評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡飒责,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,990評論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了仆潮。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片宏蛉。...
    茶點(diǎn)故事閱讀 40,127評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖性置,靈堂內(nèi)的尸體忽然破棺而出拾并,到底是詐尸還是另有隱情,我是刑警寧澤鹏浅,帶...
    沈念sama閱讀 35,812評論 5 346
  • 正文 年R本政府宣布嗅义,位于F島的核電站,受9級特大地震影響隐砸,放射性物質(zhì)發(fā)生泄漏之碗。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,471評論 3 331
  • 文/蒙蒙 一季希、第九天 我趴在偏房一處隱蔽的房頂上張望褪那。 院中可真熱鬧,春花似錦式塌、人聲如沸博敬。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,017評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽冶忱。三九已至,卻和暖如春境析,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背派诬。 一陣腳步聲響...
    開封第一講書人閱讀 33,142評論 1 272
  • 我被黑心中介騙來泰國打工劳淆, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人默赂。 一個月前我還...
    沈念sama閱讀 48,388評論 3 373
  • 正文 我出身青樓沛鸵,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子曲掰,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,066評論 2 355

推薦閱讀更多精彩內(nèi)容