[Android] Android RxBus 用法學習總結


事件總線的好處在於方便組件之間的交互,RxBus不是一個庫,而是使用RxJava實現事件總線的一種思想。

 

rxbus和eventbus相比較

RxJava 主要做異步、網絡的數據處理,強大之處就是對數據的處理了,而對於處理完后的數據處理是一樣的都是觀察者模式來通知,也可以把 RxJava 進一步封裝出一個 EventBus(RxBus) 庫,二者可以轉換的。

EventBus比較適合僅僅當做組件間的通訊工具使用,主要用來傳遞消息。使用EventBus可以避免搞出一大推的interface,僅僅是為了實現組件間的通訊,而不得不去實現那一推的接口。

如何使用:

一、添加依賴app\build.gradle

compile 'com.hwangjr.rxbus:rxbus:2.0.0'

 

二、Activity調用

1)使用方式有兩種,直接使用com.hwangjr.rxbus.RxBus或者使用單例模式得到一個對象

public static final class RxBus{
       private static Bus mBus;
       public static synchronized Bus getInstance(){
          if(mBus == null){

              mBus = new Bus();

          }
          return mBus;
      }   
 }


 2)register和unregister
要在onCreate 和 onDestory 中相繼:

RxBus.get().register(this);
RxBus.get().unregister(this);
如果是在Fragment中類似處理即可!

3)發送和接收

本次只演示注解方式實現的發送和接收

 

詳見代碼:

package com.jack.testmd;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.Toast;

import com.hwangjr.rxbus.RxBus;
import com.hwangjr.rxbus.annotation.Subscribe;
import com.hwangjr.rxbus.annotation.Tag;

public class TestRxbusActivity extends AppCompatActivity {
    private final String TAG1 = "eat";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_test_rxbus);

        RxBus.get().register(this);

        initData();
    }

    private void initData() {
        RxBus.get().post(this);  //方式1)無tag 無參數監聽
        RxBus.get().post(TAG1, this); //方式2)tag 無參數監聽
        RxBus.get().post("say", "aaa");  //方式3)有tag,有參數
    }

    @Subscribe public void some(Object obj) {
        Toast.makeText(getApplicationContext(), "some some~", Toast.LENGTH_LONG).show(); }

    @Subscribe(tags = {@Tag(TAG1)})
    public void eat(Object obj) {
        Toast.makeText(getApplicationContext(), "eat~", Toast.LENGTH_LONG).show();
    }

    //失敗 ,Produce 發送測試 無效
//    @Produce(tags = {@Tag("say")})
//    public String send1(){
//        return "say";
//    }

    @Subscribe(tags = {@Tag("say")})
    public void say(Object obj) {//此處obj為發送過來的參數 aaa
        Toast.makeText(getApplicationContext(), "rec:"+ obj.toString(), Toast.LENGTH_LONG).show(); }


    @Override
    protected void onDestroy() {
        RxBus.get().unregister(this);

        super.onDestroy();
    }
}

 

本博客地址: wukong1688

 

本文原文地址:https://www.cnblogs.com/wukong1688/p/10708413.html

 

轉載請著名出處!謝謝~~


免責聲明!

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



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