Android消息傳遞之EventBus

EventBus產生需求背景:

    在作項目的時候每每須要應用程序內各組件間、組件與後臺線程間的通訊。好比耗時操做,等耗時操做完成後經過Handler或Broadcast將結果通知給UI,N個Activity之間須要經過Listener通訊,其實這些均可以經過EventBus輕鬆實現,EventBus經過發佈/訂閱(publish/subscribe)方式來管理事件總。EventBus經過註解和反射機制 將訂閱者連同訂閱函數保存起來,而後在發送訂閱的時候 遍歷訂閱函數數組進行調用,其實從這方面就能夠EventBus執行效率多少會受到一點影響。git

   github地址:https://github.com/greenrobot/EventBusgithub

EventBus主要角色:

  •  Event 傳遞的事件對象
  •  Subscriber  事件的訂閱者 
  •  Publisher  事件的發佈者
  •  ThreadMode 定義函數在何種線程中執行
  •   官網給出的各類角色的協做圖數組

  • EventBus配置:

      EventBus框架也是採用建造者模式設計的,能夠經過EventBusBuilder來設置一些配置信息,例如設置debug模式下要拋出異常框架

    • EventBus示例:

       以前作圖片類項 的時候,須要處理一個點贊數據的同步,好比在做品的詳情頁點贊 須要同時更新列表頁該做品的點贊數量,這裏仍是以此爲例。 函數

    •  1.)build.gradle添加引用 post

      compile 'org.greenrobot:eventbus:3.0.0'

      2.)定義一個事件類型gradle

      public class DataSynEvent {
          private int count;
      
          public int getCount() {
              return count;
          }
      
          public void setCount(int count) {
              this.count = count;
          }
      }

      3.)訂閱/解除訂閱ui

    • 訂閱this

      EventBus.getDefault().register(this);//訂閱

       解除訂閱spa

      EventBus.getDefault().unregister(this);//解除訂閱

      4.)發佈事件

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

      5.)訂閱事件處理

       @Subscribe(threadMode = ThreadMode.MAIN) //在ui線程執行
          public void onDataSynEvent(DataSynEvent event) {
              Log.e(TAG, "event---->" + event.getCount());
          }
相關文章
相關標籤/搜索