RxJava中的Subject

news/2024/4/20 5:00:36/文章来源:https://blog.csdn.net/yuxuehandong/article/details/129142273

要使用Rxjava首先要导入两个包,其中rxandroid是rxjava在android中的扩展

implementation 'io.reactivex:rxandroid:1.2.1'implementation 'io.reactivex:rxjava:1.2.0'

Subject
Subject 既可以是一个 Observer 也可以是一个 Observerable,它是连接 Observer 和Observerable的桥梁

PublishSubject
PublishSubject只会把在订阅发生的时间点之后来自原始Observable的数据发射给观察者。需要注意的是,PublishSubject可能会一创建完成就立刻开始发射数据,因此这里会有一个风险:在Subject被创建后到有观察者订阅它之前这个时间段内,一个或多个数据可能会丢失。如果要确保来自原始Observable的所有数据都被分发,则可以当所有观察者都已经订阅时才开始发射数据,或者改用ReplaySubject。

        PublishSubject<String> publishSubject = PublishSubject.create();publishSubject.onNext("哈哈哈"); //数据不会发射给观察者publishSubject.subscribe(observer);publishSubject.onNext("哈哈哈2"); //数据会发射给观察者

BehaviorSubject
当Observer订阅BehaviorSubject时,它开始发射原始Observable最近发射的数据。如果此时还没有收到任何数据,它会发射一个默认值,然后继续发射其他任何来自原始Observable的数据。如果原始的Observable因为发生了一个错误而终止,BehaviorSubject将不会发射任何数据,但是会向Observer传递一个异常通知。

        BehaviorSubject<String> behaviorSubject = BehaviorSubject.create();behaviorSubject.onNext("哈哈0");  //数据不会发射给观察者behaviorSubject.onNext("哈哈1");  //数据会发射给观察者behaviorSubject.subscribe(observer);behaviorSubject.onNext("哈哈2");behaviorSubject.onNext("哈哈3");

如果继续引用 observable.subscribe(behaviorSubject); 则会打印

 observer onNext is come in s= 哈哈1observer onNext is come in s= 哈哈2observer onNext is come in s= 哈哈3observer onNext is come in s= observable call onNext0observer onNext is come in s= observable call onNextobserver onCompleted is come in

ReplaySubject
不管Observer何时订阅ReplaySubject,ReplaySubject均会发射所有来自原始Observable的数据给Observer。有不同类型的ReplaySubject,它们用于限定Replay的范围,例如设定Buffer的具体大小,或者设定具体的时间范围。如果使用ReplaySubject作为Observer,注意不要在多个线程中调用onNext、onComplete和onError方法。这可能会导致顺序错乱,并且违反了Observer规则。

        ReplaySubject<String> replaySubject = ReplaySubject.create();replaySubject.onNext("哈哈0");  //数据会发送给观察者replaySubject.onNext("哈哈1"); //数据会发送给观察者replaySubject.subscribe(observer);replaySubject.onNext("哈哈2");replaySubject.onNext("哈哈3");

AsyncSubject
当Observable完成时(必须调用onCompleted()才会发射数据),AsyncSubject只会发射来自原始Observable的最后一个数据(不管数据在订阅前还是订阅后)。如果原始的 Observable 因为发生了错误而终止,AsyncSubject 将不会发射任何数据,但是会向Observer传递一个异常通知。

        AsyncSubject<String> asyncSubject = AsyncSubject.create();asyncSubject.onNext("哈哈0");//数据不会发送给观察者asyncSubject.onNext("哈哈1");//数据不会发送给观察者asyncSubject.onNext("哈哈2");//数据不会发送给观察者(如果没有哈哈3和哈哈4 则本条数据会发射给观察者)asyncSubject.subscribe(observer);asyncSubject.onNext("哈哈3"); //数据不会发送给观察者asyncSubject.onNext("哈哈4"); //数据会发送给观察者asyncSubject.onCompleted(); //数据会发送给观察者

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_72204.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue3-element-admin搭建

vue3-element-admin 是基于 vue-element-admin 升级的 Vue3 Element Plus 版本的后台管理前端解决方案&#xff0c;是 有来技术团队 继 youlai-mall 全栈开源商城项目的又一开源力作功能清单技术栈清单技术栈 描述官网Vue3 渐进式 JavaScript 框架 https://v3.cn.vuejs.org/Ty…

经纬度坐标点和距离之间的转换

1.纬度相同&#xff0c;经度不同 在纬度相同的情况下&#xff1a; 经度每隔0.00001度&#xff0c;距离相差约1米&#xff1b; 每隔0.0001度&#xff0c;距离相差约10米&#xff1b; 每隔0.001度&#xff0c;距离相差约100米&#xff1b; 每隔0.01度&#xff0c;距离相差约1000米…

基于龙芯 2K1000 的嵌入式 Linux 系统移植和驱动程序设计(一)

2.1 需求分析 本课题以龙芯 2K1000 处理器为嵌入式系统的处理器&#xff0c;需要实现一个完成的嵌入式软件系统&#xff0c;系统能够正常启动并可以稳定运行嵌入式 Linux。设计网络设备驱 动&#xff0c;可以实现板卡与其他网络设备之间的网络连接和文件传输。设计 PCIE 设备驱…

我的 System Verilog 学习记录(1)

引言 技多不压身&#xff0c;准备开始学一些 System Verilog 的东西&#xff0c;充实一下自己&#xff0c;这个专栏的博客就记录学习、找资源的一个过程&#xff0c;希望可以给后来者一些借鉴吧&#xff0c;IC找工作的都加把油&#xff01; 本文是准备先简单介绍一下环境搭建…

洛谷P1125 [NOIP2008 提高组] 笨小猴 C语言/C++

[NOIP2008 提高组] 笨小猴 题目描述 笨小猴的词汇量很小&#xff0c;所以每次做英语选择题的时候都很头疼。但是他找到了一种方法&#xff0c;经试验证明&#xff0c;用这种方法去选择选项的时候选对的几率非常大&#xff01; 这种方法的具体描述如下&#xff1a;假设 maxn\…

JAVA集合之并发集合

从Java 5 开始&#xff0c;在java.util.concurrent 包下提供了大量支持高效并发访问的集合接口和实现类&#xff0c;如下图所示&#xff1a; 以CopyOnWrite开头的集合即写时复制的容器。通俗的理解是当我们往一个容器添加元素的时候&#xff0c;不直接往容器添加&#xff0c;而…

直播预告 | 嵌入式BI如何将数据分析真正融入业务流程

在信息化高速发展的今天&#xff0c;数据成为企业最有价值的资产之一。而数据本身很难直接传递有价值的信息&#xff0c;只有通过对数据进行挖掘、分析&#xff0c;才能让数据真正成为生产力。 商业智能&#xff08;BI&#xff09;应运而生&#xff0c;可以帮助企业更好地从数…

Julia 交互式命令窗口

执行 julia 命令可以直接进入交互式命令窗口&#xff1a; $ julia __ _ _(_)_ | Documentation: https://docs.julialang.org(_) | (_) (_) |_ _ _| |_ __ _ | Type "?" for help, "]?" for Pkg help.| | | | | | |/ _ | || |…

nginx的介绍及源码安装

文章目录前言一、nginx介绍二、nginx应用场合三、nginx的源码安装过程1.下载源码包2.安装依赖性-安装nginx-创建软连接-启动服务-关闭服务3.创建nginx服务启动脚本4.本实验---纯代码过程前言 高可用&#xff1a;高可用(High availability,缩写为 HA),是指系统无中断地执行其功…

win7下安装postgreSQL教程

系统环境&#xff1a;Windows 7 旗舰版 64位操作系统 安装版本&#xff1a;postgresql-9.1.4-1-windows-x64 安装步骤&#xff1a; 1、下载系统对应的软件版本&#xff1b; 2、双击“postgresql-9.1.4-1-windows-x64.exe”打开安装窗口&#xff1b; 3、Welcome页&#xff0c;…

图解操作系统

硬件结构 CPU是如何执行程序的&#xff1f; 图灵机的工作方式 图灵机的基本思想&#xff1a;用机器来模拟人们用纸笔进行数学运算的过程&#xff0c;还定义了由计算机的那些部分组成&#xff0c;程序又是如何执行的。 图灵机的基本组成如下&#xff1a; 有一条「纸带」&am…

allure简介

allure介绍allure是一个轻量级&#xff0c;灵活的&#xff0c;支持多语言的测试报告工具多平台的&#xff0c;奢华的report框架可以为dev/qa提供详尽的测试报告、测试步骤、log也可以为管理层提供high level统计报告java语言开发的&#xff0c;支持pytest,javaScript,PHP等可以…

C语言——动态内存管理

目录0. 思维导图&#xff1a;1. 为什么存在动态内存分配2. 动态内存函数介绍2.1 malloc和free2.2 calloc2.3 realloc3. 常见的动态内存错误3.1 对NULL指针的解引用操作3.2 对动态内存开辟的空间越界访问3.3 对非动态开辟内存使用free释放3.4 使用free释放一块动态开辟内存的一部…

django+celery+ RabbitMQ自定义多个消息队列

关于django celery的使用网上有很多文章&#xff0c;本文就不多做更多的说明。 本文使用版本 python3.8.15 Django3.2.4 celery5.2.7celery.py from __future__ import absolute_import, unicode_literals import os from celery import Celery from kombu import Exchange, …

毕业后想从事软件测试,现在需要学习哪些内容呢

在你选择学习之前&#xff0c;要先考虑一下这个是不是你喜欢的发展方向&#xff0c;而不是只听别人推荐就直接做了选择先了解下软件测试是做什么的以及未来发展前景&#xff0c;最后才是如何自学 软件测试就是在测试这个软件是不是能够完全按照需求运行。软件测试岗再简单点说…

Windows启动docker客户端报错:Hardware assisted virtualization and enabled in the BIOS

报错内容 : &#x1f31f;1.在控制面板中点击 启用或关闭Windows功能&#x1f31f;2.勾选如下复选框&#x1f31f;3.Windows功能中没有Hyper-V复选框怎么办?(如果有请跳过此步骤)此时不同人的电脑还会出现没有Hyper-V选项的情况1.打开 Windows PowerShell&#xff0c;输入 sys…

如何效率搭建企业流程系统?试试低代码平台吧

编者按&#xff1a;本文介绍了一款可私有化部署的低代码平台&#xff0c;可用于搭建团队流程管理体系&#xff0c;并详细介绍了该平台可实现的流程管理功能。关键词:可视化设计&#xff0c;集成能力&#xff0c;流程审批&#xff0c;流程调试天翎是国内最早从事快速开发平台研发…

Hive内部表与外部表的区别具体说明

目录 1.在/opt/atguigu/目录下&#xff0c;新建两个txt文件 2.在hadoop的web端递归创建一个目录&#xff0c;存储这两个文件 3.查看web端的文件 一、内部表&#xff1a; 1.创建一个内部表&#xff0c;并指定内部表的存储位置 2.查看内部表&#xff0c;内部表中没有数据 …

2023.2 新方案 java代码混淆 java加密 字符串加密

Java字节码可以反编译&#xff0c;特别是创业公司,很好的项目很容易被别人破解反编译,造成很严重的损失,所以本混淆方案能很好的保护源码,而且在不断迭代,增强混淆效果,异常问题处理,达到保护项目的目的&#xff1a; 本次升级包括: 2023年02年19日 : ht-confusion-project-1.8…

PK体系下的教育场景—电子白板的应用

PK体系指基于国产飞腾&#xff08;Phytium&#xff09;CPU和麒麟&#xff08;Kylin&#xff09;操作系统的技术和产业体系&#xff0c;被誉为“中国架构”&#xff0c;目前基于PK体系的相关软硬件已经广泛用于党政、金融、电信等关基行业。教育信创在国家大战略布局下&#xff…