浅析RxJava 版本2.2.9 《一》基础使用

Learning RxJava(原版英文PDF) 响应式编程(Reactive Programming)是当今高度受关注的程序设计范式。RxJava源于微软的Reactive Extension(即,Rx.NET)。本书是学习响应式编程方法的较好的入门书。 立即下载

RxJava已经出来很长时间,一直没有去深入的看看它的源码,最近抽时间一起来窥探一下它的精彩。总结不足之处,希望能够指出,一起进步。

标题什么是RxJava?

RxJava通过观察者模式基于事件订阅的异步执行的类库。

RxJava的目的是什么?

异步处理

RxJava的优势?

与AsyncTask和Handler对比
优势:逻辑简洁

RxJava流程图
在这里插入图片描述

这里新建了一个项目LearningRxJava
集成步骤:

  implementation "io.reactivex.rxjava2:rxjava:2.2.9"

allprojects中添加

   maven { url 'https://jitpack.io' }
RxJava的组成部分

RxJava分四个部分组成
Observable:被观察者。
Observer:观察者。
subscribe:订阅,通过Observable的subscribe()方法进行订阅。
Subscriber:观察者 与Observer类似,不同的是 Subscriber要与Flowable(另一种被观察者)联合使用。

第一种简单使用方式:

	// 创建观察者
	Subscriber observer = new Observer<String>() {
            @Override
            public void onSubscribe(Disposable d) {
                Log.e("observer", "observer onSubscribe");
            }

            @Override
            public void onNext(String s) {
                Log.e("observer", "observer onNext " + s);
            }

            @Override
            public void onError(Throwable e) {
                Log.e("observer", "observer onError " + e.getMessage());
            }

            @Override
            public void onComplete() {
                Log.e("observer", "observer onComplete");
            }
        };
    // 创建被观察者
    // 第一种方法
    Observable<String> observable = Observable.create(new ObservableOnSubscribe<String>() {
            @Override
            public void subscribe(ObservableEmitter<String> emitter) throws Exception {
                emitter.onNext("张三来了");
                emitter.onComplete();
            }
        });
    //建立关系
    observable.subscribe(observer);
    
   // 第二种方法
   Observable<String> observable1 = Observable.just("李四来了");
   //建立关系
   observable1.subscribe(observer);

输出结果:

2019-06-18 10:44:19.020 10254-10254/? E/observer: observer onSubscribe
2019-06-18 10:44:19.020 10254-10254/? E/observer: observer onNext 张三来了
2019-06-18 10:44:19.020 10254-10254/? E/observer: observer onComplete
2019-06-18 10:44:19.020 10254-10254/? E/observer: observer onSubscribe
2019-06-18 10:44:19.020 10254-10254/? E/observer: observer onNext 李四来了
2019-06-18 10:44:19.020 10254-10254/? E/observer: observer onComplete

第二种简单使用方式:

 // 创建观察者
 Subscriber subscriber = new Subscriber() {
            @Override
            public void onSubscribe(Subscription s) {
                Log.e("observer", "subscriber onSubscribe");
                s.request(Long.MAX_VALUE);
            }

            @Override
            public void onNext(Object o) {
                Log.e("observer", "subscriber onNext " + o.toString());
            }

            @Override
            public void onError(Throwable t) {
                Log.e("observer", "subscriber onError");
            }

            @Override
            public void onComplete() {
                Log.e("observer", "subscriber onComplete");
            }
        };
// 创建被观察者
 // 第一种方法
Flowable<String> flowable = Flowable.create(new FlowableOnSubscribe<String>() {
            @Override
            public void subscribe(FlowableEmitter<String> emitter) throws Exception {
                emitter.onNext("王五来了");
                emitter.onComplete();
            }
        }, BackpressureStrategy.BUFFER);

 //建立关系
 flowable.subscribe(subscriber);
 
 // 第二种方法

 Flowable<String> flowable1 = (Flowable<String>) Flowable.just("赵六来了");
 flowable1.subscribe(subscriber);

输出结果:

2019-06-18 10:44:19.037 10254-10254/? E/observer: subscriber onSubscribe
2019-06-18 10:44:19.038 10254-10254/? E/observer: subscriber onNext 王五来了
2019-06-18 10:44:19.038 10254-10254/? E/observer: subscriber onComplete
2019-06-18 10:44:19.038 10254-10254/? E/observer: subscriber onSubscribe
2019-06-18 10:44:19.038 10254-10254/? E/observer: subscriber onNext 赵六来了
2019-06-18 10:44:19.038 10254-10254/? E/observer: subscriber onComplete

通过上边这个小例子,我们清楚的知道它是怎么实现的。

参考 深入浅出RxJava(一:基础篇)
参考 RxJava2.0——从放弃到入门
参考 RxJava2.0的使用详解
参考 给 Android 开发者的 RxJava 详解
参考 详解 RxJava2 的线程切换原理

Learning RxJava 立即下载

相关推荐

高清彩版 Learning RxJava

高清彩版 Learning RxJava

Retrofit混淆后数据反序列化失败或数据解析失败问题

前言 有时候明明混淆规则配置好了(Retrofit+Rxjava+Gson+Okhttp组合),还是出现数据反序列化失败问题,本次介绍一种特殊情况,就是主app目录和module目录下各有一个bean,app的bean关联module的bean,即在子模块里尽量只放和子模块相关的混淆规则,一些公有的混淆方式请放在app或者公有的模块中。 问题复现 app目录 混淆规则: modlue目录 ...

Kelly 1577

Eplan P8 API二次开发--插入符号(Symbol)功能(Function)并定义属性

1、目的 使用Eplan API在页中自动插入某个符号并按约定规则自动设置好属性 2. 步骤 一、基础信息 比如要在Eplan中自动插入一个电机的符号并定制属性,我们先要确定要插入的符号名,可以在Eplan中获取如下符号(Symbol)信息 可以知道我们待插入的符号名称为M3_1, 接下来,使用Visual Studio建立类库项目,并引用Eplan Api库 二、获取符号变量(SymbolVariant) 在Eplan中,当一个符号(Symbol)被插入到页中,这个符号的引用即变为一个(Function

如是道程序人生 4532

浅析RxJava 版本2.2.9 《二》线程的切换使用

经过上一节的基础使用,相信大家对RxJava就有一定的了解了,下边让我们继续深入的了解它。 RxJava流程图 在Rxjava中,Scheduler是调度器,相当于线程控制器。多分为以下五个场景场景: 查看源码得知: @NonNull static final Scheduler SINGLE; @NonNull static final Scheduler CO...

jhonjson的博客 215

Claude Code 使用 OpenAI Codex(GPT-5.3-Codex)完整配置教程

通过 LiteLLM 可以让 Claude Code 调用任何模型,包括:OpenAIDeepSeekGemini本地模型↓↓优点:不依赖 Anthropic API可自由切换模型支持统一 AI Gateway这种“LLM Gateway 架构”正在成为 AI 开发工具的主流实践。

Jacobe_zhao的博客 1万+

深入解析STM32定时器中央对齐模式3的双中断机制

本文深入解析了STM32定时器中央对齐模式3的双中断机制。该模式在一个PWM周期内,会在计数器到达ARR(上溢)和0(下溢)时各触发一次更新中断,实现更精细的实时控制。文章详细阐述了其工作原理、配置方法,并指导如何在中断服务函数中通过DIR位区分中断来源,同时探讨了其在电机控制、数字电源等场景下的应用优势与CPU负载挑战。

weixin_29164185的博客 493

RxJava2 原理浅析

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

arrowyi_gbd的专栏 667

SAR ADC和sigma delta ADC的区别

0、ADC基本概念 ADC,即analog to digital converter,模拟到数字的转换器,简称模数转换器。 为什么需要ADC?因为现实的世界中,电信号是连续的,例如心电信号,或者声音信号,这些连续的信号被称为“模拟信号”。 图1:心电信号 图2:声音信号 然而这种连续的信号是无法被计算机处理的,计算机只认识0和1组成的“数字信号“。ADC就充当了这样一个桥梁,将“模拟信号”转换为计算机能识别的“数字信号”。举个例子,当前的心电电压为1.2V(实际没有这么高),ADC可能会得

长河柱天的博客 2万+

浅析RxJava核心

浅析RxJava核心   RxJava是NetFlix推出的Reactive Extensions框架的Java语言实现,同时也推出了其他平台上的RxJava包括C#、Java和JavaScript等等。这里主要介绍下RxJava的核心功能和核心函数的源码实现.   官方对Rx的表述是:Rx是一个函数库,让开发者可以利用可观察序列和LINQ风格查询操作符来编写异步和基于事件的程序,使用

4186

使用Open3D进行RGB-D图像点云处理

在本文中,我们将使用Open3D来处理RGB-D图像,提取点云并进行一些基本的操作。总结起来,本文介绍了如何使用Open3D库处理RGB-D图像并提取点云。我们展示了如何读取RGB-D图像,创建RGB-D图像和点云,并显示点云。除了显示点云,Open3D还提供了许多其他功能,如点云滤波、点云配准、表面重建等。在创建RGB-D图像时,我们需要指定深度图像的缩放因子和截断值,以及是否将RGB图像转换为强度图像。希望本文能够帮助您入门Open3D,并在处理RGB-D图像和点云数据时提供一些指导。

QfcaLinux的博客 446

华为OD机试真题 新系统 2026-04-22 Java&Go 实现【小学生班长选举增强版】

9 月份开学第一天,小学某班级进行班长选举活动,班级共有 N 个学生,每个学生最多可投 3 票(对同一个人只能投一票),也可以弃权不投票,大家投票时写上对应学生的名字。 假设学生不存在重名。考虑到部分少数民族名字带分隔,且整体较长,同学在投票时为了方便,允许同学写全称,也可以只写其中的部分连续段。 例如班级里只有 2 个少数民族名称带点的同学:

MISAYAONE的博客 263

java2和,RxJava2的使用与原理浅析(一)

前言首先,感谢以下作者分享自己对于RxJava的理解给 Android 开发者的 RxJava 详解针对RxJava1.×,入门必备RxJava2 只看这一篇文章就够了 - 掘金RxJava2的API大全,适合需要使用对应APID时作为资料查看本文设计源码以及介绍均是基于RxJava2,示例均是为了示例而示例,项目中要使用RxJava,首先在gradle中添加依赖:implementation '...

weixin_28727975的博客 287

2025年下半年网络工程师案例分析真题及答案解析

2025年下半年网络工程师案例分析真题及答案解析

鹿鸣天涯 1093

Android使用RxJava浅析

首先说一下自己为什么使用到了RxJava,因为在处理网络异步数据的时候,我一般是使用Thread+Handler或者AsyncTask来实现,直到接触了RxJava后,竟然可以如此便利的进行网络请求以及数据处理..然后就一发不可收拾,写篇博文记录一下一,简介RxJava是一种响应式编程(个人理解),他有两个重要元素Observable(被观察者,事件源)和Subscriber(观察者)。Observ

csdn_eric_zhao的博客 381

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

RxJava 1 到RxJava2

RxJava2 目前已经在国外一些应用使用上,国内应用也有部分用于生产环境,是时候考虑切换到RxJava2。RxJava2主要是解决了Backpressure, 设计符合Reactive-Streams规范,以及其它一些更新。RxJava 1.X升级RxJava 2.X部分变更 描述 RxJava 1.X RxJava 2.X package包名 rx.xxx io.react

小小程序员 1668

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

RxJava2 浅析

作者: maplejaw 开源库地址:https://github.com/ReactiveX/RxJava 版本: compile 'io.reactivex.rxjava2:rxjava:2.0.0-RC1' 前段时间阅读了RxJava1.x的源码,刚好RxJava2.x也发布了RC版,为了迎接10月底的正式版,趁热打铁,本篇将对RxJava2.x进行一个简单的剖析。Observa

maplejaw的博客 2万+

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

浅析RxJava 1.x&2.x版本使用区别及原理(一):Observable、Flowable等基本元素源码解析

RxJava开源框架的风靡程度在Github上无需多言,它带来的响应式编程模式和线程随意切换、嵌套请求、背压等功能给了开发者耳目一新的体验,更是成为了大多数APP中常用的RxJava+Okhttp/Retrofit+MVP/MVVM/Clean黄金组合中的一员。我犹记得知乎团队在去年线下还开展过一次线下RxJava交流会,邀请了扔物线讲解相关知识及体验,可见各大厂对此的重视度。如非要列举一个RxJ...

lemonGuo的大脑皮层、小脑、海马体、杏仁核..... 6047

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

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

qq_33902817的博客 2486

RxJava源码浅析

rxjava

FSC的专栏 5358

RxJava线程调度浅析

一、结论 本身不从头介绍RxJava的用法,仅对RxJava的线程调度做出一点解说,为了节约阅读时间,先把本文得到的几条结论写到前面 在不指定线程的情况下,RxJava遵循线程不变的原则,即:在哪个线程调用subscribe,就在哪个线程消费;在哪个线程生产事件,就在哪个线程消费事件; observeOn可以调用多次,每次调用影响它直接的下级Subscriber;但是subscribeOn只能调用一次; Schedulers.newThread每次都会创建一个新的线程来执行任务。 Schedulers.i

柚子君的博客 1327

安卓异步框架RxJava

安卓异步框架RxJava

似霰的博客 2660

RxJava浅析

RxJava是ReactiveX推出的一个开源库,它是Reactive Extensions的Java VM实现,可以很方便的在Java中实现响应式编程。解决了Java中繁琐的异步切换、Callback hell等问题,使逻辑变得更加简洁。 1、操作符 RxJava提供了丰富&功能强大的操作符,可以说这些操作符就是RxJava的基础及核心,所以学习RxJava都是从这些操作符开始。但由于R...

weixin_34406796的博客 797

Rxjava2源码浅析(一)

面试的时候被问道各种框架的原理架构,也是很尴尬,自以为写的代码不少,用过的框架也不少,深入的去研究源码的还真是不多,也是给自己敲了一个警钟,今天就来尝试剖析一下Rxjava2的源码,水平有限,就先看一下基础的用法相关,一些难度更高的操作符就慢慢来分析吧。 就按照平时使用的顺序来分析:一、初始化Observerble基本使用实例:Observable<String> observable= Obse

CallMeSP的博客 1405

浅析RxJava2.0

观察者模式 观察者模式,有时又被称为模型(Model)-视图(View)模式、源-收听者(Listener)模式或从属者模式。在此种模式中,一个目标物件管理所有相依于它的观察者物件,并且在它本身的状态改变时主动发出通知。这通常透过呼叫各观察者所提供的方法来实现。此种模式通常被用来实现事件处理系统。 RxJava1.0和RxJava2.0的核心思想都是观察者模式,只不过RxJava2.0在RxJava1.0的基础对一些方法进行了优化,方便于开发者更好地理解其编程思想,同时又增加了一部分新的方法解决1.0存

196
上一篇: 自定义RecyclerView横向完美循环 滑动广告 (文字完整展示)
下一篇: Android如何设置color透明度
jhonjson
博客等级 码龄11年 220粉丝 195原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值