RxJava
文章平均质量分 92
响应式编程基础
吴声子夜歌
个人学习记录
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
RxJava——Subscriber
在 RxJava 2 中,Subscriber 是用于订阅 Flowable 数据流的核心消费者接口。它是实现背压(Backpressure) 机制的关键,与 Subscription对象协同工作,实现下游对上游数据的主动拉取控制。// 关键方法Subscriber具备了Observer的所有能力,并增加了关键的 onSubscribe(Subscription s)方法。原创 2026-02-17 00:21:01 · 599 阅读 · 0 评论 -
RxJava——Hot Observable和Cold Observable
在RxJava中,Observable有Hot和Cold之分。Hot Observable无论有没有观察者进行订阅,事件始终都会发生。当Hot Observable有多个订阅者时(多个观察者进行订阅时),Hot Observable与订阅者们的关系是一对多的关系,可以与多个订阅者共享信息。Cold Observable是只有观察者订阅了,才开始执行发射数据流的代码。并且ColdObservable和Observer只能是一对一的关系。当有多个不同的订阅时,消息是重新完整发送的。原创 2026-02-16 23:34:29 · 650 阅读 · 0 评论 -
RxJava——Flowable与背压
策略数据丢失内存风险行为特点BUFFER否高无限缓存,等待消费DROP是低直接丢弃来不及处理的数据LATEST是低丢弃旧数据,只保留最新一个ERROR是低直接抛异常,流终止MISSING视后续操作而定高不处理,交由下游对数据完整性要求极高,且流量可控 -> 考虑 BUFFER(但需注意缓冲区大小限制)。允许丢弃中间状态,只关心最新状态 -> LATEST(如UI刷新)。允许丢弃数据,且不要求最新 -> DROP(如非关键指标采样)。希望。原创 2026-02-15 01:41:43 · 685 阅读 · 0 评论 -
RxJava——并行编程
RxJava2.0.5版本新增了ParallelFlowable API,它允许并行地执行一些操作符,例如map、filter、concatMap、flatMap、collect、reduce等。ParallelFlowable是并行的Flowable版本,并不是新增的被观察者类型。在ParallelFlowable中,很多典型的操作符(如take、skip等)是不可用的。在RxJava中并没有ParallelObservable,因为在RxJava2之后,Observable不再支持背压。原创 2026-02-14 22:07:34 · 604 阅读 · 0 评论 -
RxJava——调度器Scheduler
Scheduler 是 RxJava 中控制线程切换的调度器,负责指定 Observable、Flowable、Single 等操作在哪个线程执行。Scheduler用途适用场景I/O 密集型操作网络请求、文件读写、数据库操作计算密集型操作数据处理、算法计算(默认线程数=CPU核心数)每次创建新线程临时异步任务(注意线程开销)单一线程队列执行需要按顺序执行的任务当前线程队列执行延迟任务到当前线程空闲时执行自定义线程池特殊线程池需求。原创 2026-02-14 19:10:53 · 673 阅读 · 0 评论 -
RxJava——FlowableProcessor详解
Processor<T, R> 接口(Reactive Streams 规范)Flowable 接口(可以被订阅)FlowableSubscriber 接口(可以订阅其他Flowable)// 核心继承关系// 核心方法特性Subject背压支持✅ 完全支持❌ 不支持(Observable版本)Reactive Streams兼容✅ Processor接口❌ 不兼容订阅者数量限制可配置无限制缓冲区策略多种策略无缓冲区性能开销较高较低。原创 2026-02-11 22:20:20 · 409 阅读 · 0 评论 -
RxJava——Subject详解
Subject是RxJava中的特殊类型,它既是Observer(可以订阅其他Observable),又是Observable(可以被其他Observer订阅)。它作为事件总线或中继器使用。// Subject 继承关系// 核心方法// 支持背压的Flowable版本Observer会接收AsyncSubject的onComplete(之前的最后一个数据如果源Observable没有发射任何值就完成,AsyncSubject也不会发射任何值。原创 2026-02-11 16:12:43 · 657 阅读 · 0 评论 -
RxJava——被观察者
被观察者(Observable/Flowable)是RxJava中数据流的源头,负责发射数据项和通知。类型特性背压支持适用场景Observable基础被观察者无数据量小、无需背压控制Flowable支持背压的被观察者有大数据流、需要背压控制Single发射单个数据或错误无单次请求响应Maybe发射0或1个数据项无可能为空的操作只关心完成或错误无只关注操作是否完成。原创 2026-02-10 22:42:07 · 653 阅读 · 0 评论 -
RxJava——自定义操作符
封装重复的业务逻辑实现标准库中没有的操作符优化特定性能场景集成第三方库或框架实现复杂的操作符组合方式难度灵活性性能适用场景compose操作符低中高简单组合lift操作符中高高中级封装实现ObservableOperator高最高最高高级需求继承Observable最高最高最高核心功能@Override@Override@Override// 重置重试计数@Override// 重新订阅。原创 2026-02-04 01:07:08 · 303 阅读 · 0 评论 -
RxJava——操作符详解(四)
takeUntil也是使用一个标志Observable是否发送数据来进行判断:当标志Observable没有发送数据时,正常发送数据,而一旦标志Observable发送过了数据,则后面的数据都会被丢弃,其示意图如图所示。concat操作符将多个Observable结合成一个Observable并发送数据,并且严格按照先后顺序发送数据,即前一个Observable的数据没有发送完时,后面的Observable是不能发送数据的。第二个Observable只能把小于5的数据发送出来,大于5的数据都被丢弃了。原创 2026-02-02 21:45:19 · 683 阅读 · 0 评论 -
RxJava——操作符详解(三)
错误传播机制:错误与完成的关系:5.2、onErrorReturnonErroReturn操作符可以在发生错误时,让Observable发送一个预先定义好的数据并停止继续发送数据,正常结束整个过程,示意图如图所示。实际应用:5.3、onErrorResumeNextonErrorReturn操作符在有错误事件的时候会让Observable停止发送数据;而onErrorResumeNext在有错误发生的时候,会创建另外一个Observable来代替当前的Observable并继续发送数据,就好像原创 2026-01-28 18:52:26 · 766 阅读 · 0 评论 -
RxJava——操作符详解(二)
distinct还有一个特殊的实现操作符:distinctUntilChanged,这个操作符被用来过滤掉连续的重复数据,其作用范围是局部的,也就是说发送出来的数据可能会有重复,但是这些重复的数据肯定是不连续的,其示意图如图所示。需要注意的是,如果一个小的Observable正在发送数据时,源Observable又发送出一个新的小Observable,则前一个Observable未发送的数据会被抛弃,直接发送新的小Observable所发送的数据。过滤的规则是只留下小于3的数,如代码所示。原创 2026-01-25 22:20:56 · 793 阅读 · 0 评论 -
RxJava——操作符详解(一)
window操作符类似于buffer,不同之处在于buffer是将收集的数据打包作为一个整体发送出去,如发送一个List等,而window发送的是一些小的Observable对象,每个小的Observable对象包含window操作符规定的窗口里所收集到的数据,然后由这些小的Observable对象将其内部包含的数据一个个发送出来。其原理就是将这个Observable转化为多个以源Observable发送的数据作为源数据的Observable,然后将这多个Observable发送的数据整合并发送出来。原创 2026-01-22 11:39:19 · 941 阅读 · 0 评论 -
RxJava——概述
RxJava是Reactive Extensions的Java实现,用于通过使用Observable/.Flowable序列来构建异步和基于事件的程序的库。RxJava扩展观察者模式以支持数据/事件序列,并添加允许你以声明方式组合序列的操作符,同时提取对低优先级的线程、同步、线程安全性和并发数据结构等问题的隐藏。ReactiveX是Reactive Extensions的缩写,一般简写为Rx,最初是LNQ的一个扩展,由微软架构师Erik Meijer领导的团队所开发,于2012年11月开源。原创 2026-01-18 23:00:31 · 699 阅读 · 0 评论
分享