这篇文章是在读了别人的文章的基础上并结合工作中项目做的总结,总共分为以下几个部分,这只是简单总结,想了解更多原理的可以点击后面的相关链接:

1、什么是Evenbus?有什么用?怎么用?
2、什么是Rxjava?有什么用?怎么用?
3、什么是RxBus?有什么用?怎么用?
4、RxBus和EventBus区别是什么?
5、相关学习链接

下面进入正题:

1、什么是Evenbus?有什么用?怎么用?

定义:一个发布 / 订阅的事件总线,是一个开源库;
作用:选择使用它来进行模块间通信、解耦;
使用方式:EventBus库中最重要的三个点,分别是subscriber(订阅者),事件(消息),publisher(发布者)。主要理解这三者的关系即可。
subscriber ——> EventBus 的register方法,传入的object对象
事件(Event)——> EventBus 的post方法,传入的类型。
publisher(发布者)——> EventBus的post方法。
第一步:创建一个事件,说白了就是创建一个类,也就是用来传递的东西,消息,类似bean,比如第二步的EvenMessage类;
第二步:在需要订阅事件的模块中,注册eventbus,在需要接受事件的类中进行好register之后,需要在该类中创建一个方法来接收事件消息,如下。在不用的时候千万别忘了unregister。

第三步:在需要发送事件的地方,调用EventBus的post(Object event),postSticky(Object event)来通知订阅者,如下:

2、什么是Rxjava?有什么用?怎么用?

定义:实现异步操作的开源库;
作用:逻辑上(不一定是代码量),更为简洁地实现异步操作,特别是需求变复杂的时候,这一优势更加明显;
使用方式:RxJava 有四个基本概念:Observable(可观察者,即被观察者)、Observer(观察者)、subscribe(订阅)、事件。Observable和Observer通过subscribe()方法实现订阅关系,从而Observable可以在需要的时候发出事件来通知Observer。
与传统观察者模式不同,RxJava 的事件回调方法除了普通事件onNext()(相当于onClick()/onEvent())之外,还定义了两个特殊的事件:onCompleted()和onError()。
第一步:创建 Observer。Observer 即观察者,它决定事件触发的时候将有怎样的行为。法一:通过Observer接口;法二:通过Observer的抽象类:Subscriber,Subscriber对Observer接口进行了一些扩展,但他们的基本使用方式是完全一样的:


第二步:创建 Observable。Observable 即被观察者,它决定什么时候触发事件以及触发怎样的事件。RxJava 使用 create() 方法来创建一个Observable ,并为它定义事件触发规则:

第三步:Subscribe (订阅)。创建了 Observable 和 Observer 之后,再用 subscribe() 方法将它们联结起来,整条链子就可以工作了。

注意:在 RxJava 的默认规则中,事件的发出和消费都是在同一个线程的。也就是说,如果只用上面的方法,实现出来的只是一个同步的观察者模式。观察者模式本身的目的就是『后台处理,前台回调』的异步机制,因此异步对于 RxJava 是至关重要的。而要实现异步,则需要用到 RxJava 的另一个概念: Scheduler 。

3、什么是RxBus?有什么用?怎么用?

定义:一种模式,但它不是一个库,由Rxjava封装而来;
作用:类似EventBus,如果你的项目已经加入RxJava和EventBus,不妨用RxBus代替EventBus,以减少库的依赖。
使用方式:
第一步:新建RxBus类;Subject同时充当了Observer和Observable的角色,Subject是非线程安全的,在并发情况下,不推荐使用通常的Subject对象,而是推荐使用SerializedSubject,ofType操作符只发射指定类型的数据,其内部就是filter+cast。


第二步:创建需要发送的事件类

第三步:发送事件

第四步:接收事件。rxSbscription是Sbscriptio的对象,我们这里把RxBus.getInstance().toObserverable(StudentEvent.class)赋值给rxSbscription以方便生命周期结束时取消订阅事件

第五步:取消订阅

4、RxBus和EventBus区别是什么?

RxJava 主要做异步、网络的数据处理,强大之处就是对数据的处理了,而对于处理完后的数据处理是一样的都是观察者模式来通知,也可以把 RxJava 进一步封装出一个 EventBus(RxBus)库,二者可以转换的。
EventBus比较适合仅仅当做组件间的通讯工具使用,主要用来传递消息。使用EventBus可以避免搞出一大推的interface,仅仅是为了实现组件间的通讯,而不得不去实现那一推的接口。

5、相关学习链接

EventBus:
Android EventBus实战 没听过你就out了
EventBus 使用(全面分析,细节提醒)

Rxjava:
给 Android 开发者的 RxJava 详解

RxBus:
RxBus的实现及简单使用
RxBus使用

如有不当之处,欢迎指正

EventBus、Rxjava、RxBus的定义、作用、使用方式及区别相关推荐

  1. 数值范围_如何理解PLC对数值运算的定义与处理方式?

    戳上方蓝字 "技成电工课堂" 关注我们哦! 所谓数值运算,就是通过加减乘除来实现数值的变换.在PLC中,数值运算的指令不算难,难的是怎样理解PLC对这些数值的定义与处理方式.所以, ...

  2. 剖析CWE视图的层次定义和解析方式

    摘要:CWE做为软件缺陷分类的重要标准, 对安全研究.安全标准.缺陷管理起了重要的纽带作用.CWE通过编号的类型(类缺陷.基础缺陷和变种缺陷等)形成了多层次的缺陷类型划分体系.本文进一步剖析了CWE视 ...

  3. 038——VUE中组件之WEB开发中组件使用场景与定义组件的方式

    <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8" ...

  4. 【Android NDK 开发】JNI 方法解析 ( JNIEXPORT 与 JNICALL 宏定义作用 )

    文章目录 I . JNIEXPORT 与 JNICALL 宏定义 II . JNIEXPORT 与 JNICALL 宏定义说明 ( Windows 平台 ) III . JNIEXPORT 与 JNI ...

  5. 空的宏定义作用及常见用法

    空的宏定义作用及常见用法 我们学习宏定义的第一个概念是,宏定义作为替换作用. 例如: #define SIZE 32 // 接下来代码使用SIZE就相当于32 宏定义是编译器在编译时,将程序中所有SI ...

  6. TF之RNN:TF的RNN中的常用的两种定义scope的方式get_variable和Variable

    TF之RNN:TF的RNN中的常用的两种定义scope的方式get_variable和Variable 目录 输出结果 代码设计 输出结果 代码设计 # tensorflow中的两种定义scope(命 ...

  7. 编程思想 定义过滤的方式解耦

    本文将会很少涉及 dotnet 的知识,主要讲用定义过滤的方式解除过程业务的耦合.在一些业务上,可以从业务层面或逻辑层面明显分为几层,每一层之前的数据相互依赖或处理顺序相互依赖,但逻辑都独立.此时如果 ...

  8. ap 目标检测算法map_目标检测算法的评估指标:mAP定义及计算方式

    前面依次介绍了: 本节介绍目标检测算法的评估指标:mAP定义及计算方式 mAP:mean Average Precision,平均精度均值,即AP(Average Precision)的平均值,它是目 ...

  9. 利用多态特性,创建一个手机类Phones,定义打电话的方式call,创建三个子类,并在各自的方法中重写方法,编写程序入口main()方法,实现多种手机打电话...

    |--需求说明 利用多态特性,创建一个手机类Phones,定义打电话的方式call,创建三个子类,并在各自的方法中重写方法,编写程序入口main()方法,实现两种手机打电话 |--解题思路 采用简单工 ...

最新文章

  1. redis的持久化方式有哪些?
  2. linux安装python库报错pywin32,Linux windows安装paramiko模块
  3. maven+jenkins+sonar集成搭建
  4. 佳能2900打印机与win10不兼容_佳能RF 1.4、RF 2增倍镜与RF 100500mm L IS USM并不完全兼容...
  5. 将服务器get到的响应打印,得到HttpResponse的响应主体
  6. basic knowledge
  7. CodeForces 468 CHack it!
  8. 002 ceph的deploy部署
  9. chrome postman插件_接口测试工具之Postman(原创)
  10. 邮件服务器实用技巧和选购指南
  11. dh-make指定包含低线_的构建目录
  12. random是python的内置函数吗_Python 内置函数math,random
  13. 短视频源码应该优化的六个方面
  14. 火狐受信任站点设置_火狐浏览器如何添加信任站点?添加信任站点的方法说明...
  15. 安装ROS中出现bash: /opt/ros/melodic/setup.bash: 没有那个文件或目录或者bash: /opt/ros/kinetic/setup.bash:的解决办法
  16. 卷积、空洞卷积、反卷积与空洞反卷积的计算公式(全)
  17. CentOS7搭建私有化Docker仓库Harbor
  18. JS_强制类型转换_Number
  19. 安装grub到U盘分区,实现多系统引导(BIOS,UEFI)
  20. [c++][记录]编译libusb-win32过程

热门文章

  1. svn在本地搭建服务器,自己可以访问,局域网的其他电脑不可以访问
  2. format转换方法
  3. 带你走进 ERNIE
  4. 动态规划 HDU 1493 QQpet
  5. Android的识花软件推荐,形色、苗叔、花伴侣三大主流识花软件全面评测
  6. 42步进电机拆解步距角推导
  7. eBPF动手实践系列一:解构内核源码eBPF样例编译过程
  8. 台式计算机电功率为多少,台式电脑主机电源功率越大越好吗
  9. V-REP笔记:关节力矩控制的实现
  10. 学会Linux Shell循环脚本看这一篇就够了