事件总线的好处在于方便组件之间的交互,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
转载请著名出处!谢谢~~