導讀:
繼續提升自己技術吧,今天給大家帶來的是EventBus3的初探學習.
EventBus簡介:
EventBus 是一款針對Android端優化的發佈/訂閱消息總線,它簡化了應用程序內各組件間、組件與後臺線程間的通信.其主要功能是用來替代傳統的Intent、Handler、BroadCast,在Fragment、Activity、Service以及線程之間來傳遞消息.避免複雜和易出錯的依賴和生命週期問題
EventBus框架流程圖:
- 根據圖片可見框架是觀察者設計模式設計的
- Publisher 是發佈者,通過 post()方法將消息事件Event發佈到事件總線
- EventBus 是事件總線,遍歷所有已經註冊事件的訂閱者們,找到裏邊的onEvent等4個方法,分發Event
- 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,以及源碼分析