Android必知必會(huì)EventBus之使用篇

如果一個(gè)Android研發(fā)工程師,連EventBus都沒有聽說的,那可能是一個(gè)假的工程師。本問是Android攻城獅必備肉食食品,請(qǐng)務(wù)須按時(shí)食用。

EventBus,是基于事件總線的發(fā)布/訂閱模式。具有超高解耦和簡(jiǎn)潔,是Android攻城獅開發(fā)必備技能。在Android開發(fā)中,常用在不同界面更新數(shù)據(jù),達(dá)到數(shù)據(jù)同步變化,同時(shí),也可在不同線程之間傳遞數(shù)據(jù),能有效加速APP的開發(fā)。
在此,恭維的雙手遞上EventBus的Github地址,請(qǐng)慢。慢食用

模型

項(xiàng)目中導(dǎo)入庫

implementation 'org.greenrobot:eventbus:3.1.1'

使用EvnetBus三步曲
1、定義消息類型
在這里任何一個(gè)實(shí)體類都可以哦,沒有特別的要求。

public static class MessageEvent { /* Additional fields if needed */ }

2、注冊(cè)和解注冊(cè),一般用在Activity或Fragment的生命周期,具體哪個(gè)函數(shù),根據(jù)自己需求進(jìn)行選擇哦。如果不再需要數(shù)據(jù),一定要進(jìn)行解注冊(cè)呢,這是一個(gè)程序員必備的素質(zhì)。

@Override
 public void onStart() {
     super.onStart();
     EventBus.getDefault().register(this);
 }

 @Override
 public void onStop() {
     super.onStop();
     EventBus.getDefault().unregister(this);
 }

定義處理事件類型的方法
該方法需要定義在已注冊(cè)的EventBus的中,不然接收不到哦。如果注冊(cè)了EventBus后沒有定義帶有Subscribe注解的方法也會(huì)報(bào)錯(cuò)哦。

@Subscribe(threadMode = ThreadMode.MAIN)  
public void onMessageEvent(MessageEvent event) {/* Do something */};
  • 該方法必須使用Subscribe注解,public修飾,返回值為void,只能有一個(gè)參數(shù)(事件類型),不能用static,final修飾。
  • 該方法的回調(diào)線程默認(rèn)跟post線程一致,就是跟發(fā)送事件的線程在同一線程,可通過指定threadMode的值進(jìn)行修改。
    值有一下類型
    ThreadMode.POSTING:和post線程同一線程,也是默認(rèn)情況。
    ThreadMode.MAIN:在Android主線程回調(diào)。如果post線程也是主線程,那么直接回調(diào),會(huì)阻塞線程,所以不可做耗時(shí)操作。
    ThreadMode.MAIN_ORDERED:在Android主線程回調(diào)。不同于MAIN,以隊(duì)列形式被回調(diào),確保不會(huì)阻塞線程。
    ThreadMode.BACKGROUND:后臺(tái)線程,post是主線程,訂閱方法運(yùn)行在新的子線程;發(fā)布者是子線程,訂閱方法運(yùn)行在post的線程;
    ThreadMode.ASYNC:異步執(zhí)行,訂閱方法執(zhí)行在新的子線程。
  • sticky,粘性,默認(rèn)值false。與Android廣播機(jī)制中的sticky概念相同。注冊(cè)之后,訂閱者可以收到最后一條粘性事件。
  • priority,優(yōu)先級(jí)。當(dāng)事件發(fā)送后,指定多個(gè)訂閱者收到事件的順序。

3、 post事件
發(fā)送事件后,對(duì)應(yīng)的訂閱者相對(duì)應(yīng)類型的訂閱方法都會(huì)被回調(diào)。然后根據(jù)業(yè)務(wù)需求進(jìn)行處理。

 EventBus.getDefault().post(new MessageEvent());

到此,你已經(jīng)學(xué)會(huì)使用EventBus了,可以上手實(shí)戰(zhàn)了?。。?!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 假期,孩子反而忙碌。等在車上,是單純的讀書時(shí)間。 [讀書筆記1]?我在故宮修文物?(壹)(貳) 難...
    陌上花開_5d11閱讀 1,103評(píng)論 1 0
  • 雖然弗洛伊德大大的這本書遠(yuǎn)近聞名,大家或多或少都聽說過,拜讀過,汐醬也反反復(fù)復(fù)看過好多次,但每一次都會(huì)有新領(lǐng)悟。 ...
    極樂一切閱讀 1,470評(píng)論 3 4
  • 第三章心理表征 心理表征的一個(gè)重要好處在于,可以幫助我們處理信息:理解和解讀它,把它保存在記憶之中,組織它,分析它...
    我叫暖暖的冰閱讀 311評(píng)論 0 0
  • 規(guī)律: 影子的方向與太陽方向相反, 離太陽直射點(diǎn)越近,太陽高度角越大,影子越短; 離太陽直射點(diǎn)越遠(yuǎn),太陽高度角越小...
    林楚楚楚閱讀 14,674評(píng)論 0 2

友情鏈接更多精彩內(nèi)容