RxJava的四种Subjects:PublishSubject、ReplaySubject、BehaviorSubject、AsyncSubject的理解

Subject:它既是Observable,又是observer。也就是既可以发送事件,也可以接收事件。

下面是四个子类PublishSubject、ReplaySubject、BehaviorSubject、AsyncSubject的区别:

PublishSubject<Integer> source = PublishSubject.create();  //PublicSubject:接收到订阅之后的所有数据。
// It will get 1, 2, 3, 4 and onComplete
source.subscribe(getFirstObserver());
source.onNext(1);
source.onNext(2);
source.onNext(3);
// It will get 4 and onComplete for second observer also.
source.subscribe(getSecondObserver());
source.onNext(4);
source.onComplete();
ReplaySubject<Integer> source = ReplaySubject.create();  //ReplaySubject:接收到所有的数据,包括订阅之前的所有数据和订阅之后的所有数据。
// It will get 1, 2, 3, 4
source.subscribe(getFirstObserver());
source.onNext(1);
source.onNext(2);
source.onNext(3);
source.onNext(4);
source.onComplete();
// It will also get 1, 2, 3, 4 as we have used replay Subject
source.subscribe(getSecondObserver());
BehaviorSubject<Integer> source = BehaviorSubject.create();  //BehaviorSubject:接收到订阅前的最后一条数据和订阅后的所有数据。
// It will get 1, 2, 3, 4 and onComplete
source.subscribe(getFirstObserver());
source.onNext(1);
source.onNext(2);
source.onNext(3);
// It will get 3(last emitted)and 4(subsequent item) and onComplete
source.subscribe(getSecondObserver());
source.onNext(4);
source.onComplete();
AsyncSubject<Integer> source = AsyncSubject.create();  //AsyncSubject:不管在什么位置订阅,都只接接收到最后一条数据
// It will get only 4 and onComplete
source.subscribe(getFirstObserver());
source.onNext(1);
source.onNext(2);
source.onNext(3);
// It will also get only get 4 and onComplete
source.subscribe(getSecondObserver());
source.onNext(4);
source.onComplete();

文章转载:
RxJava的四种Subjects:PublishSubject、ReplaySubject、BehaviorSubject、AsyncSubject的理解

RxJava的四种Subjects:PublishSubject、ReplaySubject、BehaviorSubject、AsyncSubject的理解相关推荐

  1. 回过头来看对象的四种状态强软弱虚引用的理解

    一.对象的四种引用状态描述 在JDK1.2之后,Java对引用的概念进行了扩充,将引用分为强引用(Strong Reference).软引用(Soft Reference).弱引用(Weak Refe ...

  2. MySQL ACID及四种隔离级别的解释

    以下内容出自<高性能MySQL>第三版,了解事务的ACID及四种隔离级有助于我们更好的理解事务运作. 下面举一个银行应用是解释事务必要性的一个经典例子.假如一个银行的数据库有两张表:支票表 ...

  3. java中的强软弱虚_详解Java的四种引用——强软弱虚,颠覆你的认知!

    强软弱虚 java中的数据被类型分为了两类,它们分别是基本类型和引用类型.一般我们new出来的对象都属于引用类型的范畴.我们知道java是有垃圾回收机制的一种语言,根据垃圾回收时的策略,java将对于 ...

  4. 深入理解MySQL的四种隔离级别

    深入理解MySQL的四种隔离级别[日期:2017-02-20] 来源:Linux社区 作者:Linux [字体:大 中 小]什么是事务事务是应用程序中一系列严密的操作,所有操作必须成功完成,否则在每个 ...

  5. RxJava之PublishSubject、BehaviorSubject、ReplaySubject和AsyncSubject

    public class T2 {/*** subject 是一个神奇的对象,它可以是一个Observable同时也可以是一个Observer:它作为连接这两个世界的一座桥梁.* 一个主题可以订阅一个 ...

  6. java 场景处理,最适合使用RxJava处理的四种场景

    RxJava是异常热点的函数响应式编程库,在Android开辟中已经异常风行了,刚开端上手会有点难,但只要懂得了它,就再也回不去了:不应用RxJava写异步请求的话,就感到各类不爽. 本文不预备讲Rx ...

  7. RxJava学习(四利用RxJava打造自己的RxBus)

    前面说过Rxjava的功能很强大,不仅仅是实现链式的异步操作,它的功能很强大还可以通过RxBus实现EventBus的消息/事件传递功 能,我们来看看 RxBus 1 package com.exam ...

  8. 【Rxjs】 - 解析四种主题Subject

    原文地址: https://segmentfault.com/a/1190000012669794 引言 开发ngx(angular 2+)应用时,基本上到处都会用到rxjs来处理异步请求,事件调用等 ...

  9. datatable的数据进行组内排序_Spark实现分组Top-k排序的四种方案(scala语言)

    Spark中实现分组排序(取Top-k)的四种方法. 以求每个学科最受欢迎的老师为例,假设学科下每个老师的主页访问量的多少代表该老师的受欢迎程度. 截取log日志文件中的网址数据的格式为: 数据格式: ...

最新文章

  1. 服务端如何识别是selenium在访问以及解决方案参考二
  2. 超硬核全套Java视频教程(学习路线+免费视频+配套资料)
  3. python操作yaml的方法详解
  4. 软件测试之功能测试详细过程
  5. c 语言编译是什么意思,我有个C语言编译程序,但是不知道是什么意思,望大家解释哈,在下...
  6. 在Linux下编译安装Apache2(2)
  7. java ee me se_java EE ME SE有什么关系
  8. 用python写一个手机app签到脚本_利用Python实现App自动签到领取积分
  9. Android中的PopUpWindow
  10. Java、JSP网上订餐系统
  11. fbx格式转gif_FBX文件打开工具
  12. 怎么还原打开方式为计算机程序,W10电脑系统如何还原打开方式
  13. 最新码支付源码+微信/支付宝/qq/秒挂支付/uid+三网监控+易支付H5接口 +聚合免签系统
  14. 微诺“新婚”一年:相濡以沫 前路未知
  15. 独家解读 | Fisher信息度量下的对抗攻击
  16. 【180719】疯狂躲避球源代码
  17. REUSE_ALV_GRID_DISPLAY_LVC 实现单元格值改变前(DATA_CHANGED)和单元格值改变后(DATA_CHANGED_FINISHED)的事件响应
  18. perl生成图片_使用Perl生成模拟数据
  19. 【Python语言】Python语言基础
  20. iOS开发-调用手机浏览器打开网址

热门文章

  1. 脑洞大的日本人,做了一个AI智能观音讲佛经!
  2. 造了一台计算机,造一台红石电脑:我是说真的造出来
  3. 过年回家,和女朋友一起玩的android游戏,单身20年的手速居然输了!
  4. javaScirpt小项目-----英雄联盟游戏登录界面
  5. 多媒体技术 || 自适应的霍夫曼编码与原始的霍夫曼编码的比较
  6. 现在的SEO还有必要做吗?
  7. ECS_FML——线性回归w矩阵
  8. xorboot引导linux iso,[教程]多系统启动菜单xorboot基本教程(U盘启动)
  9. 魔兽世界 8.1 服务器维护时间,魔兽世界8.1新版本内容开放时间表!你要的都在这里!...
  10. Ubuntu 12.04 安装之后的各种问题