初探EventBus3

導讀:

繼續提升自己技術吧,今天給大家帶來的是EventBus3的初探學習.

EventBus簡介:

EventBus 是一款針對Android端優化的發佈/訂閱消息總線,它簡化了應用程序內各組件間、組件與後臺線程間的通信.其主要功能是用來替代傳統的Intent、Handler、BroadCast,在Fragment、Activity、Service以及線程之間來傳遞消息.避免複雜和易出錯的依賴和生命週期問題

EventBus GitHub鏈接

EventBus框架流程圖:

這裏寫圖片描述

  1. 根據圖片可見框架是觀察者設計模式設計的
  2. Publisher 是發佈者,通過 post()方法將消息事件Event發佈到事件總線
  3. EventBus 是事件總線,遍歷所有已經註冊事件的訂閱者們,找到裏邊的onEvent等4個方法,分發Event
  4. Subscriber是訂閱者,收到事件總線發下來的消息.即onEvent方法被執行.注意參數類型必須和發佈者發佈的參數一致.

EventBus使用:

一. 添加依賴:

//AS的道友,在Gradle
compile 'org.greenrobot:eventbus:3.0.0'

//eclipse的把項目下載下來,EventBus爲項目源碼,自行打包成jar包或者Library庫,這裏就不作說明了

二. 定義事件bean類(直接傳不定義也行)


public static class MessageEvent { 

/* Additional fields if needed */ 

}

三. 定義訂閱者,注意要在生命週期方法註冊/反註冊EventBus


//這裏的onMessageEvent可以自定義名字,注意加上上面的註解

@Subscribe(threadMode = ThreadMode.MAIN)  
public void onMessageEvent(MessageEvent event) {

/* Do something */

};

------------------分割線--------------------

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

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

四. 在要發送事件的定義Post


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

簡單介紹下EventBus中的四種ThreadMode

  • POSTING

    默認模式,事件在哪個線程Post出來,處理函數就在哪個線程中運行(這個模式需要避免主線程處理耗時操作,防止ANR)

  • MAIN

    事件的處理函數會在UI線程中執行,同理不能執行耗時操作,防止ANR

  • BACKGROUND

    如果Post不是在主線程,那麼處理函數會直接在發佈事件的線程中執行,如果在Post在主線程,那麼處理函數會在新的線程中運行,即–>不管Post在哪個線程,處理函數不能在UI線程中執行

  • ASYNC

    無論Post在哪個線程,處理函數都會通過線程池新建子線程執行,處理函數不能在UI線程中操作,這個模式一般用來執行耗時操作

總結:

這篇文章只是小試牛刀,後續補上使用Demo,以及源碼分析

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章