1. 程式人生 > >EventBus,RxBus相關介紹

EventBus,RxBus相關介紹

eventBus是一個主要用於事件的釋出和訂閱的框架,是一個釋出 / 訂閱的事件匯流排,包含4部分:釋出者,訂閱者,事件,匯流排。RxBus是一種開發思想,使用了觀察者模式的RxJava,RxAndroid實現,使用方式差不多。github地址:
EventBus https://github.com/greenrobot/EventBus

一,EventBus 總體概括

eventbus架構圖

EventBus有如下特點:

  1. 簡化了android各元件之間的通訊。
  2. 適用於Activities,Fragments以及後臺程序。
  3. 避免了複雜的,潛在的依賴錯誤和生命週期的問題。
  4. 讓程式碼更簡潔。
  5. 響應快速,jar包小。
  6. 有1億以上的APP應用了enventBus
  7. 在跨程序通訊,訂閱者優先順序方面表現優異。

二,EventBus的使用三部曲

EventBus的使用非常簡單,定義事件event,註冊訂閱者,傳送事件。

1,定義事件

所謂的event,其實也就是一個物件,裡面攜帶了需要傳遞的資訊。

public class MessageEvent { /* 新增所需的欄位 */ }
    private String msg;
    public MessageEvent(String msg) {
        this.msg = msg;
    }
    public String getMsg
() { return msg; } public void setMsg(String msg) { this.msg = msg; }

2,註冊/取消訂閱者

準備訂閱者,在onCreate方法或者構造方法裡面註冊subscribers。取消註冊在onStop中呼叫unregister即可。

 @Override
    protected void onStart() {
        super.onStart();
        //註冊EventBus
        EventBus.getDefault().register(this
); } @Override protected void onStop() { super.onStop(); //取消EventBus EventBus.getDefault().unregister(this); }

只是註冊了訂閱者還不行,還需要定義事件的接收者,處理事件。

    //事件1接收者:在主執行緒接收
    public void onEvent(String event){
        mShowInfo1.setText(event);
    }
    //事件2接收者:在主執行緒接收自定義MessageEvent訊息
    public void onEvent(MessageEvent event){
        mShowInfo21.setText(event.getMsg());
    }
    //事件3接收者:在主執行緒接收
    public void onEventMainThread(Integer event) {
        mShowInfo2.setText(event+"");
    }

3,傳送事件

eventBus.post(event);就可以傳送事件,對應的subscribers會在onEvent裡面處理這個事件。

   //事件1傳送者:在主執行緒傳送
   EventBus.getDefault().post("duqian test!");
   //事件2傳送者:在主執行緒傳送自定義MsgBean訊息
   EventBus.getDefault().post(new MessageEvent("type"));
   //事件3傳送者:在子執行緒傳送
   int mCount = 0new Timer().schedule(new TimerTask() {
       @Override
       public void run() {
           EventBus.getDefault().post(mCount);
           if (mCount >= 3) {
              this.cancel();
              mCount = 0;
           }
           mCount++;
       }
   }, 0, 1000);

三,RxBus

Rxbus使用方式和EventBus一樣,在oncreate 或者 onResume等地方註冊,和取消註冊(如onPause和onDestroy),在初始化同時,可以指定接收後所執行的執行緒。RxBus的思想是使用 RxJava 來實現了 EventBus ,而不再需要使用OTTO或者 GreenRobot 的EventBus。

1,註冊事件,register

Observable<UserBean> observable = RxBus.getInstance().register(this);
observable.observeOn(AndroidSchedulers.mainThread()).subscribe(new Action1<UserBean>() {
    @Override
    public void call(UserBean userBean) {
        Log.d("Test", "received :" + userBean.toString());
    }
});

2,取消註冊,unregister

RxBus.getInstance().unregister(this);

3,傳送事件,Post

RxBus.getInstance().post(new UserBean("rxbus", 291902259));

四,總結

EventBus,RxBus是android平臺效能極佳的事件匯流排,簡化了 Activities, Fragments, Threads, Services等元件的通訊,最少的程式碼,最佳的質量。
RxJava要比EventBus的應用更廣泛,EventBus僅僅是作為一種訊息的傳遞工具,但是RxJava裡面幾乎可以做任何事情。
如果是Android開發的話,可以使用RxAndroid,這是對RxJava的一個擴充套件,結合retrofit可以很輕鬆的完成網路的訪問。
EventBus有個缺點,使用了EventBus的類都不能進行混淆,否則Evnetbus就找不到OnEvent方法了。
推薦使用RxJava/RxAndroid。看我的另一分享:
RxJava+Retrofit+Gson實現網路請求

簡單分享下使用,未完待續,歡迎交流。杜乾,Dusan,Q 291902259