博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[Android] Android RxBus 用法学习总结
阅读量:5038 次
发布时间:2019-06-12

本文共 2347 字,大约阅读时间需要 7 分钟。

事件总线的好处在于方便组件之间的交互,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/p/10708413.html

你可能感兴趣的文章
stdext - A C++ STL Extensions Libary
查看>>
Django 内建 中间件组件
查看>>
bootstrap-Table服务端分页,获取到的数据怎么再页面的表格里显示
查看>>
进程间通信系列 之 socket套接字及其实例
查看>>
天气预报插件
查看>>
Unity 游戏框架搭建 (十三) 无需继承的单例的模板
查看>>
模块与包
查看>>
mysql忘记root密码
查看>>
安卓电量优化之AlarmManager使用全部解析
查看>>
apache服务器中设置目录不可访问
查看>>
嵌入式Linux驱动学习之路(十)字符设备驱动-my_led
查看>>
[bzoj1025][SCOI2009]游戏
查看>>
Python Web框架要点
查看>>
Sql查询利用表变量优化一例
查看>>
[luogu3155 CQOI2009] 叶子的染色(树形dp)
查看>>
LeetCode Golang 2. 两数相加
查看>>
python接口自动化测试--数据分离读取Excal指定单元格数据
查看>>
协作式取消 CancellationTokenSource
查看>>
XML
查看>>
【NOIP模拟】密码
查看>>