EventBus 3.0的用法詳解(二)

EventBus 3.0的用法詳解(一)

前一篇文章簡單介紹了EventBus 3.0的用法,現在是時候詳解其用法了。首先聲明,EventBus 3.0的改動針對2.4的改動并不是特別大,但是對于其性能的提升是另外一個說法了,所以建議學習EventBus 3.0。

注解

新增的@Subscribe

threadMode =ThreadMode.MainThread

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

publicvoidonEventMainThread(MessageEventevent) {

log(event.message);

}

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

@Subscribe(threadMode =

ThreadMode.MainThread)//在ui線程執行

publicvoidonUserEvent(UserEventevent) {

log(event.message);

}

其中ThreadMode提供了四個常量:

·MainThread主線程

·BackgroundThread后臺線程

·Async后臺線程

·PostThread發送線程(默認)

BackgroundThread:當事件是在UI線程發出,那么事件處理實際上是需要新建單獨線程,如果是在后臺線程發出,那么事件處理就在該線程。該事件處理方法應該是快速的,避免阻塞后臺線程。

Async:發送事件方不需要等待事件處理完畢。這種方式適用于該事件處理方法需要較長時間,例如網絡請求。

sticky = true

默認情況下,其為false。什么情況下使用sticky呢?

相信大多數使用過EventBus 2.4的同學或多或少的使用過:

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

EventBus.getDefault().registerSticky(this);

你會發現非常的麻煩,那么在3.0中:

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

EventBus.getDefault().register(this);

@Subscribe(sticky = true)

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

priority = 1

相信大部分人知道該用法,值越小優先級越低,默認為0。

建議

推薦大家在使用EventBus的時候,創建一個事件類,把你的每一個參數(或者可能發生沖突的參數),封裝成一個類:

publicclassEvent{

publicstaticclassUserListEvent{

publicListusers ;

}

publicstaticclassItemListEvent{

publicListitems;

}

}

添加processor

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

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

其在編譯的時候為注冊類構建了一個索引,而不是在運行時,這樣的結果是其讓EventBus 3.0的性能提升了一倍,相比2.4來說,其會是它的3到6倍。大家可以感受下:


最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 前言:EventBus出來已經有一段時間了,github上面也有很多開源項目中使用了EventBus。所以抽空學習...
    Kerry202閱讀 1,296評論 1 2
  • 對于Android開發老司機來說肯定不會陌生,它是一個基于觀察者模式的事件發布/訂閱框架,開發者可以通過極少的代碼...
    飛揚小米閱讀 1,487評論 0 50
  • 我每周會寫一篇源代碼分析的文章,以后也可能會有其他主題.如果你喜歡我寫的文章的話,歡迎關注我的新浪微博@達達達達s...
    SkyKai閱讀 25,010評論 23 184
  • 文章基于EventBus 3.0講解。首先對于EventBus的使用上,大多數人還是比較熟悉的。如果你還每次煩于使...
    Hohohong閱讀 2,334評論 0 6
  • ## 入門 ###簡介 GitHub:EventBus Android optimized event bus t...
    javaBoy_hw閱讀 469評論 0 0