EventBus 3.0的用法詳解(二)

EventBus 3.0的用法詳解(一)

前一篇文章簡(jiǎn)單介紹了EventBus 3.0的用法,現(xiàn)在是時(shí)候詳解其用法了。首先聲明,EventBus 3.0的改動(dòng)針對(duì)2.4的改動(dòng)并不是特別大,但是對(duì)于其性能的提升是另外一個(gè)說法了,所以建議學(xué)習(xí)EventBus 3.0。

注解

新增的@Subscribe

threadMode =ThreadMode.MainThread

用注解的方式代替約定的方法名規(guī)范,是其最大的改變。在2.4中,你可能需要這么定義:

publicvoidonEventMainThread(MessageEventevent) {

log(event.message);

}

該方法為接收消息后在主線程中處理事件,而在3.0中:

@Subscribe(threadMode =

ThreadMode.MainThread)//在ui線程執(zhí)行

publicvoidonUserEvent(UserEventevent) {

log(event.message);

}

其中ThreadMode提供了四個(gè)常量:

·MainThread主線程

·BackgroundThread后臺(tái)線程

·Async后臺(tái)線程

·PostThread發(fā)送線程(默認(rèn))

BackgroundThread:當(dāng)事件是在UI線程發(fā)出,那么事件處理實(shí)際上是需要新建單獨(dú)線程,如果是在后臺(tái)線程發(fā)出,那么事件處理就在該線程。該事件處理方法應(yīng)該是快速的,避免阻塞后臺(tái)線程。

Async:發(fā)送事件方不需要等待事件處理完畢。這種方式適用于該事件處理方法需要較長(zhǎng)時(shí)間,例如網(wǎng)絡(luò)請(qǐng)求。

sticky = true

默認(rèn)情況下,其為false。什么情況下使用sticky呢?

相信大多數(shù)使用過EventBus 2.4的同學(xué)或多或少的使用過:

EventBus.getDefault().postSticky(newVoteEvent(obj));

EventBus.getDefault().registerSticky(this);

你會(huì)發(fā)現(xiàn)非常的麻煩,那么在3.0中:

EventBus.getDefault().postSticky(newVoteEvent(obj));

EventBus.getDefault().register(this);

@Subscribe(sticky = true)

什么時(shí)候使用sticy,當(dāng)你希望你的事件不被馬上處理的時(shí)候,舉個(gè)栗子,比如說,在一個(gè)詳情頁(yè)點(diǎn)贊之后,產(chǎn)生一個(gè)VoteEvent,VoteEvent并不立即被消費(fèi),而是等用戶退出詳情頁(yè)回到商品列表之后,接收到該事件,然后刷新Adapter等。其實(shí)這就是之前我們用startActivityForResult和onActivityResult做的事情。

priority = 1

相信大部分人知道該用法,值越小優(yōu)先級(jí)越低,默認(rèn)為0。

建議

推薦大家在使用EventBus的時(shí)候,創(chuàng)建一個(gè)事件類,把你的每一個(gè)參數(shù)(或者可能發(fā)生沖突的參數(shù)),封裝成一個(gè)類:

publicclassEvent{

publicstaticclassUserListEvent{

publicListusers ;

}

publicstaticclassItemListEvent{

publicListitems;

}

}

添加processor

按照Markus Junginger的說法(EventBus創(chuàng)作者),在3.0中,如果你想進(jìn)一步提升你的app的性能,你需要添加:

provided'de.greenrobot:eventbus-annotation-processor:3.0.0-beta1'

其在編譯的時(shí)候?yàn)樽?cè)類構(gòu)建了一個(gè)索引,而不是在運(yùn)行時(shí),這樣的結(jié)果是其讓EventBus 3.0的性能提升了一倍,相比2.4來說,其會(huì)是它的3到6倍。大家可以感受下:


最后編輯于
?著作權(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)容

  • 前言:EventBus出來已經(jīng)有一段時(shí)間了,github上面也有很多開源項(xiàng)目中使用了EventBus。所以抽空學(xué)習(xí)...
    Kerry202閱讀 1,372評(píng)論 1 2
  • 對(duì)于Android開發(fā)老司機(jī)來說肯定不會(huì)陌生,它是一個(gè)基于觀察者模式的事件發(fā)布/訂閱框架,開發(fā)者可以通過極少的代碼...
    飛揚(yáng)小米閱讀 1,544評(píng)論 0 50
  • 我每周會(huì)寫一篇源代碼分析的文章,以后也可能會(huì)有其他主題.如果你喜歡我寫的文章的話,歡迎關(guān)注我的新浪微博@達(dá)達(dá)達(dá)達(dá)s...
    SkyKai閱讀 25,173評(píng)論 23 184
  • 文章基于EventBus 3.0講解。首先對(duì)于EventBus的使用上,大多數(shù)人還是比較熟悉的。如果你還每次煩于使...
    Hohohong閱讀 2,431評(píng)論 0 6
  • ## 入門 ###簡(jiǎn)介 GitHub:EventBus Android optimized event bus t...
    javaBoy_hw閱讀 543評(píng)論 0 0

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