EventBus--介紹


 

注意:

 

1,post()方法里面的類型和onEvent()中的類型要一致。,
2,訂閱者對象中 必須有 onEvent 的 public 方法     ---public void onEvent(Object event) { //接收消息 }
3, EventBus是一款針對Android優化的發布/訂閱事件總線。
主要功能是替代Intent,Handler,BroadCast在Fragment,Activity,Service,線程之間傳遞消息.優點是開銷小,代碼更優雅。以及將發送者和接收者解耦。
在Activity中的onCreate和onDestroy里分別注冊和解除注冊,並且聲明public void onEvent(FirstEvent event) { } 等幾個函數就可以了。
要說明的是EventBus是一個進程范圍內的發布/訂閱時間總線,所以只能在一個進程內進行訂閱和發布,如果你在新的進程里給Service/Activity發送消息,就無法收到消息了。
本質上來說,EventBus是一個在進程內給不同的類發送消息的事件總線,不論是Activity或是Service都可以。
 
5,FirstActivity , 注冊eventBus, onEvent()方法, SecondAct發送消息: 點擊按鈕從FirstAct跳到 SecondAct。
可以在 解決-----在前一個Activity注冊的時候,把目標的Activity實例化注冊,就可以傳參數了.或
在發送EventBus post請求之前 ,在發送Activity實例化目標Activity (這樣:EventBus.getDefault().register(new 目標Activity());)
或者 重寫一個MainApplication里面(EventBus.getDefault().register(new 目標Activity());)。這樣就可以啦。
  1. eventbus是必須先訂閱,才能傳值的,你新activity還沒有生成,也就還沒有訂閱成功,你就post值,肯定是接收不到的。
  2. 先post的,再rigister的,肯定沒有獲取不到數據。
  3. EventBus要先生產(注冊)才能消費(訂閱),新的activity沒有注冊監聽,它怎么能收到訂閱
  4. 有一個叫delayXXX的方法可以

 

 

 3,--EventBus 與otto的區別

3,--EventBus 與 Activity,BraodCast,Service之間傳遞數據?

 

 

 

 

 

 

2,-- Event Bus基本用法
 
分訂閱、注冊、發布、取消訂閱;主體都是誰?
注冊:EventBus提供了三個構造方法
EventBus.getDefault().register(this);
EventBus.getDefault().register(new MyClass());
//三個參數分別為:消息訂閱者(接收者),接收方法名,事件類(里面可以定義要傳遞的屬性)
EventBus.getDefault().register(this, ”setTextA”, TextA.CLASS);
 
取消注冊: 一般都是在ondestory()方法里面進行取消注冊,釋放資源!取消注冊,只需要傳遞消息訂閱者就可以了。
EventBus.getDefault().unregister(this);
EventBus.getDefault().unregister(new MyClass());
EventBus訂閱處理數據:
EventBus支持四種模式,--主線程的數據處理,交互式線程,后台線程和異步線程。
onEventMainThread(),  onEvent(),   onEventBackgroundThread()。
 
發布:支持直接發布以及 支持 發布滯留消息:
EventBus.getDefault().post(對象);
postStickyEvent();

 

觀察者模式::
按鈕觸發監聽事件—->EventBus發送消息—->EventBus接收消息—->處理接收到的消息。
安卓平台上一個用於Activity,Fragment,Thread,Service被優化簡化的通訊協議。少代碼,高質量
它自定義事件類的功能特別強大, 有了這樣定制消息的功能,我們就可以個性化消息,來對消息進行分類。
在EventBus中的觀察者通常有四種訂閱函數(就是某件事情發生被調用的方法)
1、onEvent()
2、onEventMainThread()
3、onEventBackground()
4、onEventAsync()
該方法將會在同一個線程來調用,避免了線程之間的切換,比如你是在主線程發送的消息,那么將會運行在主線程,如果為其他線程,那么將在其他線程調用。
// 在相同線程里調用(默認):在onEvent方法中不能執行耗時的操作,如果執行,則導致事件分發延遲。
    public void onEvent(MessageEvent event) {
        log(event.message);
}
// 在主線程(UI線程)調用--不論發送事件者在那個線程,接受事件都 將會在主線程調用,
    public void onEventMainThread(MessageEvent event) {
        textField.setText(event.message);   //進行UI操作
}
// 接收者直接在后台線程
如果事件是在UI線程中發布出來的,那么onEventBackground就會在子線程中運行,如果事件本來就是子線程中發布出來的,那么onEventBackground函數直接在該子線程中執行。
   public void onEventBackgroundThread(MessageEvent event){
       saveToDisk(event.message);     //進行耗時操作
   }
onEventAsync();---使用這個函數作為訂閱函數,那么無論事件在哪個線程發布,都會創建新的子線程在執行onEventAsync.

 

1.1 --Event Bus 和 Otto事件總線分發庫
什么是事件總線管理?
1)將事件放到隊列里,通過隊列進行事件的管理和分發!
2)保證應用的各個部分之間高效的通訊及數據、事件分發!
3)模塊之間的解耦! 不用寫網絡請求接口回調了,直接通過EventBus傳遞數據。(通過接口回調傳遞數據、通過EventBus傳遞數據)
Event Bus是一個發布/訂閱的事件總線。
Event Bus模式也被稱之為Message Bus或者 發布者/訂閱者模式,可以讓兩個組件相互通信,但是它們之間並不相互知曉。有些類似於(廣播機制)。
1)在需要接收信息的地方,進行一個訂閱和注冊;
2)在發送數據的地方進行發布
3)然后在訂閱的地方就可以收到,並進行處理。
基於事件總線管理/訂閱/分發模式。事件響應有更多線程選擇,EventBus可以向不同的線程中發布事件。
使用時需要先注冊訂閱,發布者然后向訂閱者分發消息數據即可。
訂閱者可以訂閱多個事件,發布者可以發布任何事件;發布者同時也可以是訂閱者。分訂閱、注冊、發布、取消注冊等步驟。
 
Event Bus包含四個部分:發布者、訂閱者、事件、總線。
Event Bus分發流程:
1)發布者首先把它的事件傳遞到Event Bus事件總線里面進行管理,等待分發;
2)事件總線按照相應的邏輯,把事件發布給定閱者;
3)然后訂閱者就可以接收到數據(通過對應的方法進行接收),進行相應的處理。
Event Bus基於標准的命名規范,注解模式比較消耗內存,所以Event Bus效率上要高一些。
Event Bus支持交互線程的事件傳遞(支持主線程和子線程的通訊)Event Bus傳遞效率比較快。基於數據解耦通訊的相關app!
 
1,--EventBus 基本信息:
 
compile 'de.greenrobot:eventbus:2.4.0'
1)使用起來特別簡單,但是要懂原理;
2)要注意使用的步驟和流程;
3)主要作用:組件之間相互通訊、線程之間相互通訊等


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM