事件总线的好处在于方便组件之间的交互, 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();
- }
- }
本博客地址: https://www.cnblogs.com/wukong1688/
来源: http://www.bubuko.com/infodetail-3023839.html