EventBus 3.0 小使用

本篇是基于 http://www.lxweimin.com/p/acfe78296bb5 這篇文章。簡單的總結下,加深記憶。(其實就是copy)

前言

EventBus是greenrobot在Android平臺發布的一款以訂閱——發布模式為核心的開源庫。EventBus翻譯過來是事件總線的意思,可以這樣理解:一個個事件(event)發送到總線上,然后EventBus根據已注冊的訂閱者(subscribers)來匹配相應的事件,進而把事件傳遞給訂閱者,這也是觀察者模式的一個最佳實踐。

那么EventBus可以用到什么地方呢?我們平時開發的時候,當遇到Activity與Activity、Activity與Fragment之間的通信,往往采用Intent,又或者線程之間使用Handler進行通信,這樣代碼難免會復雜許多,而使用EventBus能極大簡化兩個組件之間的通信問題,而且效率極高,而EventBus升級到3.0版本后,開發者能夠自定義訂閱方法的名字,而沒必要規定以“onEventXX”開頭的方法了,這樣也自由化了很多,而且支持了粘性事件的分發等,因此學會使用EventBus3.0對我們的開發有極大的好處。

相比于EventBus 之前的版本。

  • 訂閱者的訂閱方法的名字可以隨意,不用必須寫OnEvent(...);
  • 必須要在訂閱者的訂閱方法上添加 @Subscribe(里面的內容后面有)次注解
  • 新的版本添加粘性事件的分發、訂閱者的線程工作、優先級的問題。使用更給力

和之前一樣 注冊和銷毀 沒變

//注冊成為訂閱者
EventBus.getDefault().register(this);
 @Override
    protected void onDestroy() {
        super.onDestroy();
        //解除注冊
        EventBus.getDefault().unregister(this);
    }
//訂閱方法,當接收到事件的時候,會調用該方法
    @Subscribe(threadMode = ThreadMode.MAIN)
    public void onEvent(MessageEvent messageEvent){
    //這個OnEvent(...); 名字可以變化。但是必須加注解
    }

下面聊一下@Subscribe
里面有三個注解可以使用分別為:

  • ThreadMode 代表訂閱方法所運行的線程
    • POSTING:表示訂閱方法運行在發送事件的線程**(默認)
      **
    • MAIN:表示訂閱方法運行在UI線程,由于UI線程不能阻塞,因此當使用MAIN的時候,訂閱方法不應該耗時過長。
    • BACKGROUND:表示訂閱方法運行在后臺線程,如果發送的事件線程不是UI線程,那么就使用該線程;如果發送事件的線程是UI線程,那么新建一個后臺線程來調用訂閱方法。
    • ASYNC:訂閱方法與發送事件始終不在同一個線程,即訂閱方法始終會使用新的線程來運行。
  • sticky 代表是否是粘性事件
    設置該優先級的目的是,當一個事件有多個訂閱者的時候,優先級高的會優先接收到事件。
  • priority 代表優先級

關于粘性事件,可以參考Android的廣播機制,其中有一個粘性廣播,粘性廣播的意思是:該廣播發送后,會保存在內存中,如果后來有注冊的Receiver與之匹配,那么該Receiver便會接收到該廣播。那么粘性事件同理,在注冊之前便把事件發生出去,等到注冊之后便會收到最近發送的粘性事件(必須匹配)。注意:只會接收到最近發送的一次粘性事件,之前的會接受不到。(在注冊后可以馬上接受到離自己最近的一次事件)

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,501評論 6 544
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,673評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,610評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,939評論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,668評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 56,004評論 1 329
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,001評論 3 449
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,173評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,705評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,426評論 3 359
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,656評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,139評論 5 364
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,833評論 3 350
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,247評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,580評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,371評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,621評論 2 380

推薦閱讀更多精彩內容

  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,829評論 18 139
  • 前言 EventBus是greenrobot在Android平臺發布的一款以訂閱——發布模式為核心的開源庫。Eve...
    丶藍天白云夢閱讀 24,266評論 18 76
  • 對于Android開發老司機來說肯定不會陌生,它是一個基于觀察者模式的事件發布/訂閱框架,開發者可以通過極少的代碼...
    飛揚小米閱讀 1,487評論 0 50
  • 我每周會寫一篇源代碼分析的文章,以后也可能會有其他主題.如果你喜歡我寫的文章的話,歡迎關注我的新浪微博@達達達達s...
    SkyKai閱讀 24,990評論 23 184
  • 我在南方的小城,湘潭。一個很小的三、四線小城,因沾了偉人故里的仙氣,也曾名揚四海,而今逝者如斯,追思者渺。早日盛景...
    水靜深流閱讀 427評論 0 0