Rxjava:实现原理浅析

Rxjava学习:onNext、onComplete、doOnNext、doFinally、doAfterTerminate执行顺序 目的 了解onNext、onComplete、doOnNext、doFinally、doAfterTerminate执行的执行顺序。 测试代码 import io.reactivex.Observable; import org.junit.Test; /** * @description: 测试onNext、onComplete、doOnNext、doFinally、doAfterTerminate执行顺序 * @author: lizz * @date: 2020/11/17 17:5. 阅读详情

从使用步骤逐步深入:

使用步骤

Observable.create(new ObservableOnSubscribe<Integer>() {
            @Override
            public void subscribe(@NonNull ObservableEmitter<Integer> emitter) throws Throwable {
                emitter.onNext(1);
                emitter.onNext(2);
                emitter.onNext(3);
                emitter.onComplete();
            }
        }).subscribe(new Observer<Integer>() {
            @Override
            public void onSubscribe(@NonNull Disposable d) {
                Log.d("main", "开始采用subscribe连接");
            }

            @Override
            public void onNext(@NonNull Integer integer) {
                Log.d("main", "next" + integer);
            }

            @Override
            public void onError(@NonNull Throwable e) {
                Log.d("main", "对Error事件作出响应");
            }

            @Override
            public void onComplete() {
                Log.d("main", "onComplete");
            }
        });

被观察者创建过程

    public static <@NonNull T> Observable<T> create(@NonNull ObservableOnSubscribe<T> source) {
        Objects.requireNonNull(source, "source is null");
        return RxJavaPlugins.onAssembly(new ObservableCreate<>(source));
    }

核心是new ObservableCreate<>(source),传入的相当于事件发出的source

public final class ObservableCreate<T> extends Observable<T> {
    final ObservableOnSubscribe<T> source;

    public ObservableCreate(ObservableOnSubscribe<T> source) {
        this.source = source;
    }
    
    @Override
    protected void subscribeActual(Observer<? super T> observer) {
        CreateEmitter<T> parent = new CreateEmitter<>(observer);	//用于发射事件
        observer.onSubscribe(parent);		//调用观察者中重写的方法onSubscribe

        try {
            source.subscribe(parent);		//调用被观察者的subscribe方法(产生事件)
        } catch (Throwable ex) {
            Exceptions.throwIfFatal(ex);
            parent.onError(ex);
        }
    }

该类内部把source存储起来,并且重写的subscribeActual方法将observer观察者和observable被观察者联系起来,用于触发。

事件onNext

@Override
public void onNext(T t) {
    if (t == null) {
        onError(ExceptionHelper.createNullPointerException("onNext called with a null value."));
        return;
    }
    if (!isDisposed()) {
        observer.onNext(t);
    }
}

onNext的实现如上,若没有disposed(关闭连接),就执行onNext。(此处在create内只是定义好方法,并没有真正执行,只有subscribe触发subscribeActual,该方法里面调用了source.subscribe(parent)就是真正执行这些定义好的方法)

观察者创建过程

new Observer<Integer>() 

Observer本身就是一个接口,里面四个方法响应被观察者的不同事件

观察者与被观察者的联系subscribe

    public final void subscribe(@NonNull Observer<? super T> observer) {
        Objects.requireNonNull(observer, "observer is null");
        try {
            observer = RxJavaPlugins.onSubscribe(this, observer);

            subscribeActual(observer);
    }

这里就发现subscribe会调用内部的subscribeActual,就会再调用被观察者实现的subscribe方法,其中的onNext等内容就会被调用

【MAUI】OnCompleted、OnNext、OnError 在响应式编程(Reactive Programming)中,`OnNext`、`OnCompleted` 和 `OnError` 是观察者(Observer)模式中的三个核心方法,它们共同构成了观察者接口的一部分,用于处理数据流中的事件。这种模式允许数据生产者和数据消费者之间建立一种基于事件的异步通信机制。 阅读详情

相关推荐

RxJava2原理解析

本文主要讲解RxJava2的原理,不再讲解其用法和相关概念。首先我们知道,RxJava是流式编程,在每一条流中,都至少包含三个要素:源头/被订阅者(Observable或Flowable)、订阅者(Observer或subscriber)、触发时机(subscribe()方法),其次就是线程切换(subscribeOn()和observeOn()),最后就是数据变换(如map()、flatMap(...

reakingf的博客 5200

Observable 对象作为方法的返回类型,并在响应处理代码块中使用 onNext() 方法来传递 网络返回数据值

【代码】Observable 对象作为方法的返回类型,并在响应处理代码块中使用 onNext() 方法来传递 网络返回数据值。

--------→成人不自在,自在不成人℃ ------------ 324

谈谈人大金仓数据库

人大金仓数据库(Kingbase)是国产自主研发的关系型数据库管理系统,兼容主流数据库语法,支持高并发、高安全性及国产化适配。该数据库提供完整的安装部署方案,包括环境准备、初始化配置和验证流程,并配备专业的数据迁移工具(KDMS)实现从Oracle/MySQL等数据库的平滑迁移。系统提供KStudio等图形化管理工具,支持性能监控、备份恢复等运维功能,同时具备性能调优、高可用架构、分区表管理等高级特性,满足政府、金融等领域的企业级需求。

蜚鸣的博客 2092

Java:理解java响应式编程

理解java响应式编程

netyeaxi的专栏 1万+

交流伺服电机绝对式位置控制实战指南

伺服电机控制是工业自动化的核心技术之一,其核心原理是通过闭环反馈实现精确位置控制。绝对值编码器作为关键传感器,能提供单圈内的绝对位置信息,避免了增量式编码器的累计误差问题。在工程实践中,电子齿轮比配置、位置环PID调节等技术直接影响系统动态性能。本文以包装机械为典型场景,详细解析了从硬件选型到参数整定的全流程实现方案,特别是针对单圈绝对值编码器初始化和限位保护等易错环节,给出了经过验证的解决方案。通过合理设置17位编码器的电子齿轮比和优化运动控制算法,最终实现了±0.05°的高精度定位。

weixin_42531588的博客 281

【Unity】YooAsset与HybridCLR:高效资源管理与代码热更的黄金组合

本文深入探讨了Unity开发中YooAsset与HybridCLR的组合应用,为需要长期运营的项目提供了完整的资源与代码热更新解决方案。YooAsset作为高效的资源管理框架,简化了AssetBundle的打包、加载与热更流程;而HybridCLR则攻克了IL2CPP模式下C#代码无法热更的难题。两者结合,实现了从资源到逻辑的平滑在线更新,极大提升了开发迭代与线上维护的效率。

weixin_29006701的博客 278

Observable 发射时,为何会调用 Subscriber 的 onNext 方法

当Observable发射 “Hello, world!” 时,它会调用Subscriber的onNext方法,这是因为onNext是Subscriber接收和处理数据项的标准方法。在 ReactiveX 中,每当Observable发射一个数据项时,它都会通过调用onNext方法将数据项传递给订阅者。

micro9981的专栏 632

AlphaFold2算法详解

正文:https://www.nature.com/articles/s41586-021-03819-2 补充文件:https://static-content.springer.com/esm/art%3A10.1038%2Fs41586-021-03819-2/MediaObjects/41586_2021_3819_MOESM1_ESM.pdfhttps://static-content.springer.com/esm/art%3A10.1038%2Fs41586-021-03819-2/Med

Daisy4的博客 1万+

一起来造一个RxJava,揭秘RxJava的实现原理

RxJava是一个神奇的框架,用法很简单,但内部实现有点复杂,代码逻辑有点绕。我读源码时,确实有点似懂非懂的感觉。网上关于RxJava源码分析的文章,源码贴了一大堆,代码逻辑绕来绕去的,让人看得云里雾里的。既然用拆轮子的方式来分析源码比较难啃,不如换种方式,以造轮子的方式,将源码中与性能、兼容性、扩展性有关的代码剔除,留下核心代码带大家揭秘RxJava的实现原理。什么是响应式编程首先,我们需要明确,

TellH的博客 3万+

基于qiime2的16S数据分析全流程:从导入数据到下游分析一条龙

基于qiime2的16s测序数据分析分析激活qiime环境我已经把上面这句代码放在了.bashrc里面,因此激活qiime2环境只需要运行activate_qiime即可/bin/bash# 设置目录路径# 输出表头 echo -e "sample-id\tforward-absolute-filepath\treverse-absolute-filepath"# 遍历_R1和_R2文件do # 检查R1文件是否存在then# 获取样本ID(去掉_R1.fastq.gz)

2301_76771985的博客 5518

Buck电源设计常见的一些问题(一)半桥栅极驱动芯片共性失效问题

半桥驱动芯片主要用在器件可应用于电信,数据通信,便携式存储或更低电压系统中的电源转换器,半桥、全桥、推挽、同步降压,正激变换器和同步整流器等方面。当然难免会遇到不少问题。基本上我们在产品开发的过程中都遇到过栅极驱动芯片坏掉的情况,所以找了一些资料,学习学习。也查找查找原因。

小幽余生不加糖 2369

RxJava2 原理浅析

RxJava2 原理浅析背景分析总结 背景 最近在看Rxjava的相关资料, 上网搜索资料发现大部分的文章都是教授如何使用RxJava的,但是这样只知其然,不知其所以然,总是感觉学的不彻底,用着不踏实,所以就想找一些能揭示其原理的文章参考下。 But, 网上(至少是国内的网上)对于RxJava是如何实现响应式编程模式介绍文章还是比较难以找到得,不过还好,还是有大神介绍了一些原理性的文章。但是,这篇...

arrowyi_gbd的专栏 667

南 京 农 业 大 学 试 题 纸 附表(rape.csv)是25个油菜材料,测得每个材料的千粒重、亚油酸等的含量. (1) 对物质含量的八个指标作主成分分析,画出碎石图和主成分得分图; (2) 选

(1)请用n1

Mrrunsen的博客 497

Carson带你学Android:图文解析RxJava原理

今天,carson今天将采用 图文的方式 解析 Rxjava的基本原理,希望大家会喜欢。

Carson带你学Android 7498

【AIGC】大模型面试高频考点09-大模型Agent框架

聚焦AIGC专业技术分享

一个内容严谨、方向前沿、极具实践价值的AI大模型技术分享站 1964

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Android Rxjava教程:清晰 简洁 易懂的Rxjava入门教程

前言 Rxjava由于其基于事件流的链式调用、逻辑简洁 & 使用简单的特点,深受各大 Android开发者的欢迎。 image 本文主要: 面向 刚接触Rxjava的初学者 提供了一份 清晰、简洁、易懂的Rxjava入门教程 涵盖 基本介绍、原理 & 具体使用等 解决的是初学者不理解Rxjava原理 & 不懂得如何使用的问题 希望你们会喜欢。 本文主要基于Rxjava 2.0 如果读者还没学习过Rxjava 1.0也没关系,因为Rxja

yzwfeng的专栏 9724

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

RxJava原理学习

这是对RxJava设计模式以及源码的介绍

Android小白 6914

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Rxjava实现原理

RxJava(Reactive Extensions for Java)是一个响应式编程库,它提供了一种声明式的异步数据流编程模型,基于观察者模式和响应式编程原则。RxJava允许开发者以声明式的方式编写非阻塞的、异步的数据处理代码,非常适合处理事件流、网络请求、数据库操作等场景。下面是RxJava。

VitorLiu的博客 950

RxJava源码浅析

rxjava

FSC的专栏 5358

Android开发——简述RxJava框架的实现原理

0.前言看此篇之前最好知道RxJava的使用,关于框架的使用推荐这篇文章,由于RxJava内部实现有点复杂,既然用拆轮子的方式来分析源码比较难啃,不如换种方式,以造轮子的方式,将源码中与性能、兼容性、扩展性有关的代码剔除,留下核心代码带大家揭秘RxJava的实现原理(本文不涉及框架的使用介绍)。1.观察者Subsribler在RxJava里面是一...

关于Android开发的一些技术点总结 ╮( ̄▽ ̄”)╭ 2459

一文详解 RxJava2 使用及实现原理

RxJava—一个可以在JVM上运行的,基于观察者模式 实现异步操作的java库。其英文描述为:RxJava – Reactive Extensions for the JVM – a library for composing asynchronous and event-based programs using observable sequences for the Java

bjxiaxueliang的CODING小栈 3059

RxJava源码浅析———订阅流程、map与Filter操作符实现原理

RxJava源码浅析———订阅流程、map与filter操作符实现原理 RxJava是一个非常流行的基于观察者模式的响应式编程框架,在Android开发等领域有很广泛的应用。作为Java开发者,我们有必要了解一下RxJava的实现原理,掌握RxJava的设计思想,这样我们才能更加熟练的使用RxJava来编写优秀的代码。 订阅流程 要使用RxJava,首先要创建一个被观察者Observable

qq_30354011的博客 361

Rxjava2原理流程+操作符+线程切换 浅析~

0.前言 没拜读过强大的代码就建议去稍微看一下rxjava2的原理,并不难懂。写的非常的好,也能领略到大佬写的代码有多么的强。里面的设计模式真的牛逼 1.Rxjava2 Rxjava2用于我们来做响应式编程模式的操作。用起来很简单,但是如果面试/其它场合下让你去写一些骚操作或者说其中的原理,真的蒙蔽的不行…然后去研读其代码,发现很多文章写的优点乱.让我有点理不清楚. 这就当算是我阅读源码的理解吧… 2.文章解决的问题. RxJava2的基本运行流程 map操作符的运作 线程切换原理 3.总图解 借助大佬

qq_33902817的博客 2486

RxJava使用及原理

RxJava的使用及简单的原理 Jxl是一个开源的Java Excel API项目,通过Jxl,Java可以很方便的操作微软的Excel文档。除了Jxl之外,还有Apache的一个POI项目,也可以操作Excel,两者相比之下:Jxl使用方便,但功能相对POI比较弱。POI使用复杂,上手慢,除了这个没啥说的了。 二、特点

蜕变的快乐 2378

RxJava/RxAndroid 详解——从基础到实现原理

[RxJava的github地址:https://github.com/ReactiveX/RxJava](https://github.com/ReactiveX/RxJava) [RxAndroid的github地址:https://github.com/ReactiveX/RxAndroid](https://github.com/ReactiveX/RxAndroid)

Kern_的专栏 2050

【Android开源框架面试题】 RxJava框架线程切换的原理,RxJava1与RxJava2有哪些区别?

我整理了一套Android面试题合集,除了以上面试题,还包含【Java 基础、集合、多线程、虚拟机、反射、泛型、并发编程、Android四大组件、异步任务和消息机制、UI绘制、性能调优、SDN、第三方框架、设计模式、Kotlin、计算机网络、系统启动流程、Dart、Flutter、算法和数据结构、NDK、H.264、H.265.音频编解码、FFmpeg、OpenMax、OpenCV、OpenGL ES。

datian1234的博客 1412
上一篇: Rxjava:基础入门
魔幻音
博客等级 码龄6年 16粉丝 202原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

魔幻音

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值