RxBus是用来进行组件之间通讯的。因为项目当中用到了RxJava,因此用RxBus来实现组件之间的通讯,相对来说比较方便。关于RxBus的介绍和其他组件通讯工具EventBus可参考下面链接:

用RxJava实现事件总线

EventBus实战

在没有这些工具之前,我们是怎么实现组件之间的通讯呢?我想到了三点:

1、用intent来传递数据

2、用注入依赖回调(意思就是注册监听回调)

3、借助广播组件(推荐使用本地广播)

我觉得有这三点也足够应付项目上的需求了。但当业务复杂的情况下,借助RxBus或EventBus可大大提高我们的开发效率,而且深度解耦。

下面来看下RxBus是如何使用的:

创建RxBus类:

public class RxBus {private final Subject<Object, Object> _bus;private static class RxBusHolder{private static final RxBus instance = new RxBus();}private RxBus() {_bus = new SerializedSubject<>(PublishSubject.create());}public static synchronized RxBus getInstance() {return RxBusHolder.instance;}public void post(Object o) {_bus.onNext(o);}public <T> Observable<T> toObserverable(Class<T> eventType) {return _bus.ofType(eventType);}
}

假如我的需求是这样的:Main2Activity界面做了操作来更新MainActivity界面

首先MainActivity得先注册吧:

public class MainActivity extends AppCompatActivity {@BindView(R.id.test)TextView test;Subscription mSubscription;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);ButterKnife.bind(this);initRxBus();}private void initRxBus() {mSubscription = RxBus.getInstance().toObserverable(UserEvent.class).subscribe(new Action1<UserEvent>() {@Overridepublic void call(UserEvent userEvent) {long id = userEvent.getId();String name = userEvent.getName();Toast.makeText(MainActivity.this, "name = " + name, Toast.LENGTH_SHORT).show();}},new Action1<Throwable>() {@Overridepublic void call(Throwable throwable) {}});}@Overrideprotected void onResume() {super.onResume();GankRequestHelp.onRequest();}@Overrideprotected void onDestroy() {super.onDestroy();if (!mSubscription.isUnsubscribed()) {mSubscription.unsubscribe();}}public void onViewClick(View v) {Intent intent = new Intent(this, Main2Activity.class);startActivity(intent);}
}

可以看到在initRxBus中向RxBus中的Subject(充当被观察者)订阅了观察者,toObserverable用来过滤UserEvent类型,另外记得onDestroy时进行销毁,防止内存泄漏。

然后我们在Main2Activity中传递数据:

    public void onPostRxBusClick(View view) {RxBus.getInstance().post(new UserEvent(1, "wuliqing"));}

可以看到向RxBus中的Subject(充当观察者)提交数据。然后Subject会将数据发射给订阅的观察者。
最后我们可以看到MainActivity接收到了数据。如果在发送数据之前有多处地方订阅了,则都会收到数据。

RXbus的用法在此记录,方便需要的同学查阅。

RXBUS的简单使用相关推荐

  1. RxBus的简单使用(易懂)

    1.引入依赖库: implementation 'io.reactivex:rxjava:1.1.0'implementation 'io.reactivex:rxandroid:1.1.0' 2,. ...

  2. 从 RxBus 这辆兰博基尼深入进去

    又到周五啦,先祝大家周末愉快. 今天继续发车,本篇文章来自 谢三弟 的投稿,从官方文档以及源码入手,介绍了使用RxJava实现RxBus的原理.最后,想容易得看懂本文,前提是需要对RxJava有一定了 ...

  3. android rxbus2.0封装,浅谈Rxbus封装(一)

    最近再看一个项目,但是那个项目里面的Rxjava是1.x版本的,由于最近又有一个项目要开始了,在封装各种基类,所以我准备将项目中的Rxbus用Rxjava2.x来修改一下继续用,由于2.x的Rxjav ...

  4. LiveData vs EventBus?是否可以实现共赢

    近日,据国外媒体报道,电动汽车厂商特斯拉的股价本周一再次大涨,延续上周4个交易日连续大涨的势头,CEO埃隆·马斯克的身价也因此而增至463亿美元,比马云和拼多多创始人黄峥均高出了31亿美元. / 前言 ...

  5. 如何优雅的使用LiveData实现一套EventBus(事件总线)

    本文已经对<第一行代码>作者郭霖的公众号授权独家发布 前言 EventBus大家都很熟悉了,各种实现方式也是层出不穷,然而,作为有追求的程序员们,永远在不停的造轮子,毕竟,在程序员的眼中, ...

  6. LiveData vs EventBus?不,他们其实可以一起

    /   今日科技快讯   / 近日,据国外媒体报道,电动汽车厂商特斯拉的股价本周一再次大涨,延续上周4个交易日连续大涨的势头,CEO埃隆·马斯克的身价也因此而增至463亿美元,比马云和拼多多创始人黄峥 ...

  7. rxbus 源码_RxBus的实现及简单使用

    RxJava目前已经很火了,如果你尚未了解请看这里.对于RxJava这里不多做介绍. RxBus并不是一个库,而是一种模式.相信大多数开发者都使用过EventBus,作为事件总线通信库,如果你的项目已 ...

  8. android rxbus 一个页面监听,Android RxBus的使用

    RxBus的核心功能是基于Rxjava的,在RxJava中有个Subject类,它继承Observable类,同时实现了Observer接口,因此Subject可以同时担当订阅者和被订阅者的角色,这里 ...

  9. android动态改变菜单栏,Android动态设置主题(使用RxBus模式)

    之前写过一篇文章:RxBus的实现及简单使用.今天我们尝试使用RxBus动态切换主题. 一.定义主题颜色 color.xml #F44336 #D32F2F #F44336 #E91E63 #C218 ...

最新文章

  1. linux下poll和epoll内核源代码剖析
  2. 谷歌浏览器 chrome 查看当前页面cookie
  3. UA MATH571A 一元线性回归II 统计推断2
  4. Python爬虫自学之第(①)篇——爬虫伪装和反“反爬”
  5. spring之基本介绍以及老版本框架的下载地址
  6. 购买物品_1美元能买些啥?盘点1美元在10个不同的国家所能购买的物品
  7. linux系统论文题目大全_操作系统专业论文选题 操作系统毕业论文题目如何定
  8. 医院门诊管理系统——计件收费
  9. mysql下载和安装详细教程
  10. IDC发布2021年中国云计算10大预测;Docker 桌面为 M1 推出技术预览版
  11. EBS 使用API更新物料属性 Inv_Item_Grp
  12. 新浪云生成互联网页面及域名
  13. 【汉字转拼音工具】Java 汉字转拼音
  14. 消防设施操作员考试真题、模拟练习题库(8)
  15. error: (-215:Assertion failed) npoints = 0 (depth == CV_32F || depth == CV_32F || depth ==CV_32S
  16. shell-shell概述
  17. 端口汇聚和端口聚合的区别
  18. XenApp/XenDesktop 7.11新功能
  19. 记录微信小程序项目遇到的几个问题
  20. USB Type-C拓展DisplayPort and USB2.0(基于PD通讯)

热门文章

  1. Java生成随机数的方式
  2. Xlua和C#使用简介
  3. Flutter MD5加密工具类
  4. 使用在线编辑 svg 软件修改 svg 图片
  5. 计算机组成原理 基础知识
  6. python清洗文本非法字符_Python 文本字符串清理
  7. USB扫码枪获取数据流的实现方式
  8. vue input判断值是扫码枪还是键盘输入
  9. Linux ❉ 正则表达式
  10. 解决LinuxRedhat网卡配置MAC地址冲突问题