EventBus使用

爲了大家讓大家更加清楚地理解EventBus並使用,本文采用課程的3W1H思路講解

WHAT

EventBus是一款針對Android優化的發佈/訂閱事件總線。主要功能是替代Intent,Handler,BroadCast在Fragment,Activity,Service,線程之間傳遞消息

 

WHY

傳統的傳遞消息,Activity和Activity傳遞數據,Activity和fragment傳遞消息,Fragment和Fragment之前,還有Service和Activity。傳遞消息都使用Intent,或者接口回調,廣播,等方法,使用起來非常麻煩。

發送者和接收者耦合度太高,那麼就需要尋求一個解決方案。

首先,EventBus使用非常簡便,簡單的幾個事件處理就能解決所有的消息傳遞問題。

使得消息發送者和處理者耦合度降低,也就是解耦。具有開銷小,代碼更優雅的特點,使用更加簡便。

 

WHERE

當需要進行組件間通信的時候,或者一個界面的數據發生變化,其他所有的界面數據隨之發生變化的時候,可以看出,使用EventBus是多麼的方便和易控制。

HOW

(1).自定義一個事件類,可以是空類,比如:

   public class AnyEventType {  

 public AnyEventType(){}  

 }  

(2).獲得事件處理實例

採用EventBus.getInstance()來獲取默認的EventBus實例

(3).在要接收消息的地方進行註冊

eventBus.register(this);  

(4).發消息

eventBus.post(new AnyEventType event);  

(5).處理消息

public void onEvent(AnyEventType event) {}  

(6).解除註冊

eventBus.unregister(this);  

用一個案例來實現:

AB兩個Activity界面,從A跳轉到B界面,從B界面發送一個事件,A收到事件後Toast打印出事件內容。

1.創建一個Android項目

2.下載EventBusjar包導入工程

3.新建一個事件類

  public class EventBusEvent {      

      private String mMsg;  

      public EventBus(String msg) {  

                  mMsg = msg;  

      }  

      public String getMsg(){  

          return mMsg;  

      }  

  }  

4.A界面接收消息註冊EventBus,點擊按鈕跳轉B界面

  @Override  

      protected void onCreate(Bundle savedInstanceState) {  

          super.onCreate(savedInstanceState);  

          setContentView(R.layout.activity_main);  

                  //註冊EventBus  

          EventBus.getDefault().register(this);  

    

          btn = (Button) findViewById(R.id.btn_try);  

          tv = (TextView)findViewById(R.id.tv);  

    

          btn.setOnClickListener(new View.OnClickListener() {  

    

              @Override  

              public void onClick(View v) {  

                  // TODO Auto-generated method stub  

                  Intent intent = new Intent(getApplicationContext(),  

                          SecondActivity.class);  

                  startActivity(intent);  

              }  

          });  

      }  

      @Override  

      protected void onDestroy(){  

          super.onDestroy();  

          EventBus.getDefault().unregister(this);//反註冊EventBus  

      }  

//收到消息後處理

   public void onEventMainThread(EventBusEvent event) {  

    

          String msg = "onEventMainThread收到了消息:" + event.getMsg();  

          Toast.makeText(this, msg, Toast.LENGTH_LONG).show();  

      }  

5.B界面發送消息,調用下面的方法

 EventBus.getDefault().post(  

                         new EventBusEvent("Event start")); 

實際演示,當在BActivity中點擊按鈕的時候,就會彈出一個Toast通知。


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