EventBus 使用總結(jié)

1.EventBus是一個基于觀察者模式的事件發(fā)布/訂閱框架绊序,開發(fā)者通過極少的代碼去實(shí)現(xiàn)多個模塊之間的通信,而不需要以層層傳遞接口的形式去單獨(dú)構(gòu)建通信橋梁秽荞。從而降低因多重回調(diào)導(dǎo)致的模塊間強(qiáng)耦合骤公,同時避免產(chǎn)生大量內(nèi)部類。擁有使用方便扬跋,性能高阶捆,接入成本低,支持多線程的優(yōu)點(diǎn)钦听。

2.使用過程 :

? 1)導(dǎo)入: ?

0)在app的gradle的dependences里引入??compile'org.greenrobot:eventbus:3.0.0'

A)在項(xiàng)目的gradle的dependences中引入 classpath'com.neenbedankt.gradle.plugins:android-apt:1.8'(如果使用索引的話)

B)在app的gradle中引入 (如果使用索引的話)

?applyplugin:'com.neenbedankt.android-apt'

? ? ?apt {

? ? ? ? ?arguments {

? ? ? ? ? ? ? ?eventBusIndex"com.study.sangerzhong.studyapp.MyEventBusIndex"

? ? ? ?}

?}

C)在app的gradle中引入? apt'org.greenrobot:eventbus-annotation-processor:3.0.1'

2)初始化

接受事件的activity需要對eventbus進(jìn)行初始化:?

@OverridepublicvoidonStart(){

? ? ?super.onStart();? ??

? ? ? EventBus.getDefault().register(this);

}

@Override

publicvoidonStop(){?

? ? ? EventBus.getDefault().unregister(this);

? ? ? super.onStop();

}


3)接受

@Subscribe(threadMode = ThreadMode.MAIN)

?publicvoidonMessage(MessageEventevent){??

? ? ? ? ?textField.setText(event.message);

}

@Subscribe(sticky =true, threadMode = ThreadMode.MAIN)//粘性事件

publicvoidonEvent(MessageEvent event){// UI updates must run on MainThread

? ? ? ?textField.setText(event.message);? ??

}

4)發(fā)送

EventBus.getDefault().post(newMessageEvent("Hello everyone!"));

EventBus.getDefault().postSticky(newMessageEvent("Hello everyone!"));//發(fā)送粘性事件

5)自配置eventBus

EventBusBuilder用來配置EventBus余指。比如,如果一個提交的事件沒有訂閱者柴钻,可以使EventBus保持安靜贴届。

EventBuseventBus = EventBus.builder().logNoSubscriberMessages(false)? ? .sendNoSubscriberEvent(false).build();

另一個例子是當(dāng)一個訂閱者拋出一個異常的失敗昔善。注意:默認(rèn)情況下翩概,EventBus捕獲異常從onEvent方法中拋出并且發(fā)出一個SubscriberExceptionEvent 钥庇,這個事件可以不必處理评姨。

EventBus eventBus= EventBus.builder().throwSubscriberException(true).build();

6)情況

PostThread:如果使用事件處理函數(shù)指定了線程模型為PostThread,那么該事件在哪個線程發(fā)布出來的蕴侧,事件處理函數(shù)就會在這個線程中運(yùn)行,也就是說發(fā)布事件和接收事件在同一個線程裹纳。在線程模型為PostThread的事件處理函數(shù)中盡量避免執(zhí)行耗時操作,因?yàn)樗鼤枞录膫鬟f朋鞍,甚至有可能會引起ANR更舞。

MainThread:如果使用事件處理函數(shù)指定了線程模型為MainThread,那么不論事件是在哪個線程中發(fā)布出來的刊头,該事件處理函數(shù)都會在UI線程中執(zhí)行。該方法可以用來更新UI污尉,但是不能處理耗時操作被碗。

BackgroundThread:如果使用事件處理函數(shù)指定了線程模型為BackgroundThread,那么如果事件是在UI線程中發(fā)布出來的焚志,那么該事件處理函數(shù)就會在新的線程中運(yùn)行云矫,如果事件本來就是子線程中發(fā)布出來的挑社,那么該事件處理函數(shù)直接在發(fā)布事件的線程中執(zhí)行。在此事件處理函數(shù)中禁止進(jìn)行UI更新操作阱当。

Async:如果使用事件處理函數(shù)指定了線程模型為Async动猬,那么無論事件在哪個線程發(fā)布,該事件處理函數(shù)都會在新建的子線程中執(zhí)行。同樣凤覆,此事件處理函數(shù)中禁止進(jìn)行UI更新操作。

7)

手動獲取和移除sticky事件

就像前一段說的那樣拥峦,最后的sticky事件在訂閱者注冊的時候會自動傳遞。但是,有時候手動檢測sticky事件更方便羽利。有時候他們不再傳遞的時候需要移除sticky事件当宴。比如:

MessageEvent stickyEvent = EventBus.getDefault().getStickyEvent(MessageEvent.class);// Bettercheckthat an event was actually posted beforeif(stickyEvent != null) {? ? //"Consume"the sticky event? ?

?EventBus.getDefault().removeStickyEvent(stickyEvent);? ? // Now do something with it

}

轉(zhuǎn)自

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末梯浪,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子眠砾,更是在濱河造成了極大的恐慌柒巫,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,123評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件揩慕,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評論 2 384
  • 文/潘曉璐 我一進(jìn)店門二拐,熙熙樓的掌柜王于貴愁眉苦臉地迎上來百新,“玉大人,你說我怎么就攤上這事形庭。” “怎么了厌漂?”我有些...
    開封第一講書人閱讀 156,723評論 0 345
  • 文/不壞的土叔 我叫張陵萨醒,是天一觀的道長。 經(jīng)常有香客問我苇倡,道長晓褪,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,357評論 1 283
  • 正文 為了忘掉前任变过,我火速辦了婚禮辨宠,結(jié)果婚禮上赋兵,老公的妹妹穿的比我還像新娘霹期。我一直安慰自己帕膜,他們只是感情好荒典,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,412評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著栗竖,像睡著了一般添吗。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上处坪,一...
    開封第一講書人閱讀 49,760評論 1 289
  • 那天根资,我揣著相機(jī)與錄音,去河邊找鬼同窘。 笑死玄帕,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的想邦。 我是一名探鬼主播裤纹,決...
    沈念sama閱讀 38,904評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了鹰椒?” 一聲冷哼從身側(cè)響起锡移,我...
    開封第一講書人閱讀 37,672評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎漆际,沒想到半個月后淆珊,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,118評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡奸汇,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,456評論 2 325
  • 正文 我和宋清朗相戀三年施符,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片擂找。...
    茶點(diǎn)故事閱讀 38,599評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡戳吝,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出贯涎,到底是詐尸還是另有隱情听哭,我是刑警寧澤,帶...
    沈念sama閱讀 34,264評論 4 328
  • 正文 年R本政府宣布塘雳,位于F島的核電站陆盘,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏粉捻。R本人自食惡果不足惜礁遣,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,857評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望肩刃。 院中可真熱鬧祟霍,春花似錦、人聲如沸盈包。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,731評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽呢燥。三九已至崭添,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間叛氨,已是汗流浹背呼渣。 一陣腳步聲響...
    開封第一講書人閱讀 31,956評論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留寞埠,地道東北人屁置。 一個月前我還...
    沈念sama閱讀 46,286評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像仁连,于是被迫代替她去往敵國和親蓝角。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,465評論 2 348

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

  • 概述 EventBus是Android開發(fā)最常用的一個庫了,它給我們帶來了很好便利性使鹅,輕松實(shí)現(xiàn)消息的發(fā)布和訂閱揪阶。但...
    dylanhuang88閱讀 982評論 0 48
  • EventBus 是一個Android端優(yōu)化的 publish/subscribe 消息總線,簡化了應(yīng)用程序各個組...
    王世軍Steven閱讀 1,846評論 4 21
  • 前言:EventBus出來已經(jīng)有一段時間了,github上面也有很多開源項(xiàng)目中使用了EventBus患朱。所以抽空學(xué)習(xí)...
    Kerry202閱讀 1,282評論 1 2
  • EventBus是一個 發(fā)布/訂閱 模式的消息總線庫鲁僚,它簡化了應(yīng)用程序內(nèi)各組件間、組件與后臺線程間的通信麦乞,解耦了事...
    hanpfei閱讀 4,045評論 0 50
  • 先吐槽一下博客園的MarkDown編輯器蕴茴,推出的時候還很高興博客園支持MarkDown了劝评,試用了下發(fā)現(xiàn)支持不完善就...
    Ten_Minutes閱讀 559評論 0 2