事件總線框架EventBus

  • What

EventBus是一種在Java和Android中使用的基于發(fā)布/訂閱的事件模型信认,可以廣泛使用在Activity材义、Fragment和線程之間通信,由于它的簡(jiǎn)易嫁赏、快速其掂、輕便和可配置等特點(diǎn)被廣泛使用。

EventBus-Publish-Subscribe.png
  • How

在使用之前需在app/build.gradle文件下添加EventBus所需的依賴橄教,EventBus的GitHub倉庫地址清寇。

首先需要定義事件類型,用于發(fā)布者發(fā)布出去护蝶。

public static class MessageEvent {
    public String message;

    public MessageEvent(String message) {
      this.message = message;
    }
  }

準(zhǔn)備訂閱者华烟,訂閱者可以是Activity、Fragment或者線程持灰,如果是Activity盔夜,需要在onStart和onStop方法中注冊(cè)和解除注冊(cè)事件總線,如果是Fragment堤魁,在onViewCreated和onDestroyView中注冊(cè)和解除注冊(cè)事件總線喂链,還需要實(shí)現(xiàn)接收到事件的處理方法,通過@Subscribe注解妥泉,方法名沒有要求椭微,但是訪問權(quán)限必須是public,參數(shù)必須是一個(gè)事件類型盲链,而且只能有一個(gè)參數(shù)蝇率,返回類型必須是void。在相應(yīng)的事件發(fā)出后刽沾,對(duì)應(yīng)的處理方法會(huì)被調(diào)用本慕。

@Subscribe(threadMode = ThreadMode.MAIN,sticky = true)
  public void handleEventMessage(SecondFragment.MessageEvent messageEvent){
    mFirstTextView.setText(messageEvent.message);
  }

發(fā)布者可以在任何地方發(fā)出一個(gè)消息,消息通過事件總線傳遞侧漓,注冊(cè)了的訂閱者就會(huì)收到消息锅尘,對(duì)應(yīng)的處理方法會(huì)被調(diào)用。

mSecondButton.setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View v) {
        Log.d(TAG, "onClick: " + Thread.currentThread().getId());
        EventBus.getDefault().post(new MessageEvent("hello,second fragment"));
      }
    });
  • threadMode

EventBus具有四種線程模式布蔗,用于對(duì)訂閱者的事件處理方法執(zhí)行在哪一個(gè)線程進(jìn)行說明藤违。默認(rèn)使用的是POSTING,發(fā)布事件和處理事件方法執(zhí)行在同一個(gè)線程纵揍,這種模式下纺弊,發(fā)布和訂閱是同步完成的,一旦發(fā)布骡男,所有訂閱者都能收到事件消息,這個(gè)模式避免了線程切換傍睹,開銷較小隔盛,但是需要快速返回犹菱,防止阻塞發(fā)布者所在線程;MAIN模式下訂閱者處理方法會(huì)被主線程執(zhí)行吮炕,需要避免處理方法過于耗時(shí)腊脱,導(dǎo)致ANR;MAIN_ORDERED相比與main龙亲,訂閱者收到和執(zhí)行的消息是有序的陕凹;BACKGROUND判斷發(fā)布消息的線程是否在 UI 線程,如果不是的話直接反射調(diào)用鳄炉,是的話通過backgroundPoster的enqueue()方法 將方法加入到后臺(tái)的一個(gè)隊(duì)列杜耙,最后通過線程池去執(zhí)行;ASYNC邏輯實(shí)現(xiàn)類似于BACKGROUND拂盯,將任務(wù)加入到后臺(tái)的一個(gè)隊(duì)列佑女,最終由Eventbus 中的一個(gè)線程池去調(diào)用。

  • strickEvent

粘性事件谈竿,普通事件需要訂閱者注冊(cè)以后才能收到發(fā)布者發(fā)出的事件团驱,而粘性事件可以將最新的事件保存在內(nèi)存中,將來注冊(cè)的訂閱者也可以接收到之前最新的事件空凸。發(fā)送的粘性事件會(huì)保存在一個(gè) map 中嚎花,這樣才能實(shí)現(xiàn)后訂閱也能接收到的功能,同時(shí)會(huì)保留最后一個(gè)粘性事件呀洲。對(duì)于某些只處理一次的事件紊选,會(huì)造成重復(fù)處理最后一個(gè)粘性事件的情況,有時(shí)這是不符合預(yù)期的两嘴,需要在處理完粘性事件后手動(dòng)將其刪除丛楚,使用 removeStickyEvent()方法進(jìn)行移除。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末憔辫,一起剝皮案震驚了整個(gè)濱河市趣些,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌贰您,老刑警劉巖坏平,帶你破解...
    沈念sama閱讀 218,204評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異锦亦,居然都是意外死亡舶替,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門杠园,熙熙樓的掌柜王于貴愁眉苦臉地迎上來顾瞪,“玉大人,你說我怎么就攤上這事〕滦眩” “怎么了惕橙?”我有些...
    開封第一講書人閱讀 164,548評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)钉跷。 經(jīng)常有香客問我弥鹦,道長(zhǎng),這世上最難降的妖魔是什么爷辙? 我笑而不...
    開封第一講書人閱讀 58,657評(píng)論 1 293
  • 正文 為了忘掉前任彬坏,我火速辦了婚禮,結(jié)果婚禮上膝晾,老公的妹妹穿的比我還像新娘栓始。我一直安慰自己,他們只是感情好玷犹,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,689評(píng)論 6 392
  • 文/花漫 我一把揭開白布混滔。 她就那樣靜靜地躺著,像睡著了一般歹颓。 火紅的嫁衣襯著肌膚如雪坯屿。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,554評(píng)論 1 305
  • 那天巍扛,我揣著相機(jī)與錄音领跛,去河邊找鬼。 笑死撤奸,一個(gè)胖子當(dāng)著我的面吹牛吠昭,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播胧瓜,決...
    沈念sama閱讀 40,302評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼矢棚,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了府喳?” 一聲冷哼從身側(cè)響起蒲肋,我...
    開封第一講書人閱讀 39,216評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎钝满,沒想到半個(gè)月后兜粘,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,661評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡弯蚜,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,851評(píng)論 3 336
  • 正文 我和宋清朗相戀三年孔轴,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片碎捺。...
    茶點(diǎn)故事閱讀 39,977評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡路鹰,死狀恐怖贷洲,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情晋柱,我是刑警寧澤恩脂,帶...
    沈念sama閱讀 35,697評(píng)論 5 347
  • 正文 年R本政府宣布,位于F島的核電站趣斤,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏黎休。R本人自食惡果不足惜浓领,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,306評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望势腮。 院中可真熱鬧联贩,春花似錦、人聲如沸捎拯。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽署照。三九已至祸泪,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間建芙,已是汗流浹背没隘。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評(píng)論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留禁荸,地道東北人右蒲。 一個(gè)月前我還...
    沈念sama閱讀 48,138評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像赶熟,于是被迫代替她去往敵國和親瑰妄。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,927評(píng)論 2 355

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