[Android] Android RxBus 用法学习总结

事件总线的好处在于方便组件之间的交互,RxBus不是一个库,而是使用RxJava实现事件总线的一种思想。

rxbus和eventbus相比较

RxJava 主要做异步、网络的数据处理,强大之处就是对数据的处理了,而对于处理完后的数据处理是一样的都是观察者模式来通知,也可以把 RxJava 进一步封装出一个 EventBus(RxBus) 库,二者可以转换的。

EventBus比较适合仅仅当做组件间的通讯工具使用,主要用来传递消息。使用EventBus可以避免搞出一大推的interface,仅仅是为了实现组件间的通讯,而不得不去实现那一推的接口。

如何使用:

一、添加依赖appuild.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

转载请著名出处!谢谢~~

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