RxJava 简介 安装 RxJava 可观察对象、可流动对象、观察者和订阅 创建可观察对象 变换可观察对象 过滤可观察对象 组合可观察对象 错误处理 调度者 主题 示例项目 什么是反应式编程?...可观察对象、可流动对象、观察者和订阅者 在 ReactiveX 中,观察者订阅一个可观察的对象。当观察者发射数据时,观察者通过消耗或转换数据做出反应。...它们被称为“可连接的”可观察对象,RxJava 拥有能够创建此类可观察对象的操作符。 RxJava2.0 引入了一种新的可观察类型,称为Flowable。...组合可观察对象 这些运算符用于组合多个可观察对象。...捕获运算符 这些运算符可以通过继续执行以下顺序从错误中恢复: onErrorResumeNext:指示一个可观察对象将控制权传递给供应器提供的另一个可观察对象,而不是在出现问题时调用onError onErrorReturn
作用 组合 多个被观察者(Observable) & 合并需要发送的事件 2. 类型 RxJava 2 中,常见的组合 / 合并操作符 主要有: 下面,我将对每个操作符进行详细讲解 3....,即依赖不能同时存在 } 3.1 组合多个被观察者 该类型的操作符的作用 = 组合多个被观察者 concat() / concatArray() 作用 组合多个被观察者一起发送数据,合并后 按发送顺序串行执行...(可>4个) // 注:串行执行 Observable.concatArray(Observable.just(1, 2, 3),...,合并后 按时间线并行执行 二者区别:组合被观察者的数量,即merge()组合被观察者数量≤4个,而mergeArray()则可>4个 区别上述concat()操作符:同样是组合多个被观察者一起发送数据...,但concat()操作符合并后是按发送顺序串行执行 具体使用 // merge():组合多个被观察者(<4个)一起发送数据 // 注:合并后按照时间线并行执行 Observable.merge
作用 组合 多个被观察者(`Observable`) & 合并需要发送的事件 ---- 2. 类型 RxJava 2 中,常见的组合 / 合并操作符 主要有: ?...,即依赖不能同时存在 } 3.1 组合多个被观察者 该类型的操作符的作用 = 组合多个被观察者 concat() / concatArray() 作用 组合多个被观察者一起发送数据,合并后 按发送顺序串行执行...(可>4个) // 注:串行执行 Observable.concatArray(Observable.just(1, 2, 3),...merge() / mergeArray() 作用 组合多个被观察者一起发送数据,合并后 按时间线并行执行 二者区别:组合被观察者的数量,即merge()组合被观察者数量≤4个,而mergeArray...()则可>4个 区别上述concat()操作符:同样是组合多个被观察者一起发送数据,但concat()操作符合并后是按发送顺序串行执行 具体使用 // merge():组合多个被观察者(<4个)一起发送数据
事件(Event) 被观察者 & 观察者 沟通的载体 菜式 具体原理 请结合上述 顾客到饭店吃饭 的生活例子理解: 即RxJava原理可总结为:被观察者 (Observable) 通过 订阅...(Subscribe) 按顺序发送事件 给观察者 (Observer), 观察者(Observer) 按顺序接收事件 & 作出对应的响应动作。...subscribe() 方法执行时 } 5.2 方式2:优雅的实现方法 - 基于事件流的链式调用 上述的实现方式是为了说明Rxjava的原理 & 使用 在实际应用中,会将上述步骤&代码连在一起,从而更加简洁...所以,一般建议使用这种基于事件流的链式调用方式实现RxJava。 特别注意 RxJava 2.x 提供了多个函数式接口 ,用于实现简便式的观察者模式。...额外说明 7.1 观察者 Observer的subscribe()具备多个重载的方法 public final Disposable subscribe() {} // 表示观察者不对被观察者发送的事件作出任何响应
即RxJava原理可总结为:被观察者 (Observable) 通过 订阅(Subscribe) 按顺序发送事件 给观察者 (Observer), 观察者(Observer) 按顺序接收事件 & 作出对应的响应动作...创建被观察者对象Observable --> // 方法1:just(T...)...subscribe() 方法执行时 } 5.2 方式2:优雅的实现方法 - 基于事件流的链式调用 上述的实现方式是为了说明Rxjava的原理 & 使用 在实际应用中,会将上述步骤&代码连在一起,从而更加简洁...所以,一般建议使用这种基于事件流的链式调用方式实现RxJava。 特别注意 RxJava 2.x 提供了多个函数式接口 ,用于实现简便式的观察者模式。具体如下: ?...额外说明 7.1 观察者 Observer的subscribe()具备多个重载的方法 public final Disposable subscribe() {} // 表示观察者不对被观察者发送的事件作出任何响应
也就是说多个观察者对应一个被观察者。字看累了来看图: ? 其实在android中也有很多自带的观察者模式。最明显的莫过于点击事件。说个最简单的例子,点击按钮后弹一个吐司。...也就是说它可以讲一个观察对象变换成多个观察对象,但是并不能保证事件的顺序。想保证事件的顺序?那你过会看下面降到的concatMap。 那么什么叫作数据集合变成一个Observable集合呢?...还记不记得我上面说过flatMap不能保证事件执行顺序。那么这边事件为什么都是按顺序执行的?...不能保证执行顺序。所以万事容我慢慢道来。先喝杯茶压压惊。我们在接着往下讲。 concatMap 上面我也介绍了concatMap。除了保证了执行顺序,其他都和concatMap一毛一样。...可以从执行顺序和打印时间看出,的的确确是延迟了一秒钟。 compose 这个操作符就很厉害了。他的变换是怎么做的呢?我们知道rxjava是通过建造者的模式通过链式来调用起来的。
每个请求都会被包装成一个Command对象来执行,该图示展示的一个请求执行的关键流程。...} 实例中使用三种方式来执行,均是可以的,各位可自行选择。 ---- RxJava有话说 由于hystrixy-core依赖于RxJava构建,因此需要做个简单了解。 那么什么是RxJava呢?...Observable(被观察者,也就是数据发射器):public class Observable代表一个被观察对象 Observer(观察者,也就是数据接收器) :public interface...distinct: timeout: distinctUntilChanged: throttleFirst: throttleWithTimeout/debounce: … 组合/合并: concat:按顺序连接多个...---- 关于RxJava的介绍就先到这,这是一个极简介绍而已,这里我贴出几篇文章,有兴趣者可前往阅读: 我所理解的RxJava——上手其实很简单(一)(二)(三) RxJava系列教程 我为什么不再推荐
事件(Event) 被观察者 & 观察者 沟通的载体 菜式 具体原理 请结合上述 顾客到饭店吃饭 的生活例子理解: 即RxJava原理可总结为:被观察者 (Observable) 通过 订阅(Subscribe...) 按顺序发送事件 给观察者 (Observer), 观察者(Observer) 按顺序接收事件 & 作出对应的响应动作。...subscribe() 方法执行时} 5.2 方式2:优雅的实现方法 - 基于事件流的链式调用 上述的实现方式是为了说明Rxjava的原理 & 使用 在实际应用中,会将上述步骤&代码连在一起,从而更加简洁...所以,一般建议使用这种基于事件流的链式调用方式实现RxJava。 特别注意 RxJava 2.x 提供了多个函数式接口 ,用于实现简便式的观察者模式。...额外说明 7.1 观察者 Observer的subscribe()具备多个重载的方法 public final Disposable subscribe() {} // 表示观察者不对被观察者发送的事件作出任何响应
rxJava 是处理响应扩展的,解决 事件的响应问题(比如事件的响应在哪个线程?)。 rxJava 是序列的。它是个有顺序的队列,按顺序的,先进后出的。它对集合对象的支持很好。...rxJava 使用了 设计模式里的 观察者模式 来实现。它的核心理念的两个东西: 被观察者 被观察的对象,它是一个事件源,它的状态将会订阅者观察到。...观察者(订阅者) 关注“被观察者”的对象 订阅 建立关系,我们说“订阅者”订阅了“被观察者” rxJava 可以用来改善用户操作体验,它很方便的切换代码运行的线程....map() 方法执行了转换,将对象转成字符串 .subscribeOn() 指示了 在哪个线程里执行 上面的转换操作。 ...使用 just() 方法,指定单个对象来创建被观察对象实例。
前言 今天开始聊聊Rxjava,这个神奇又难用又牛逼的框架。 先说说Rxjava两个关键词: 异步。Rxjava可以通过链式调用随意切换线程,同时又能保证代码的简洁。 观察者模式。...Rxjava的核心,说白了就是一个观察者模式,通过观察者订阅被观察者这一层订阅关系来完成后续事件的发送等工作。...RxJava中的操作符 concatMap flatMap 这两个操作符的功能是一样的,都是将一个发射数据的Observable变换为多个Observables,然后将它们发射的数据放进一个单独的Observable...5,6,7,8); Observable.merge(odds,events).subscribe(i->Log.d("TAG","merge->"+i)); 区别在于concat操作符是在合并后按顺序串行执行...而zip操作符的特点是合并之后并行执行,发射事件和最少的一个相同,什么意思呢?
如果还不了解RxJava,请看文章:Android:这是一篇 清晰 & 易懂的Rxjava 入门教程 今天,carson今天将采用 图文的方式 解析 Rxjava的基本原理,希望大家会喜欢。...原理介绍 5.1 概述 Rxjava原理 基于 一种扩展的观察者模式,整个模式中有4个角色: 角色 作用 类比 被观察者(Observable) 产生事件 顾客 观察者(Observer) 接收事件,并给出响应动作...厨房 订阅(Subscribe) 连接 被观察者 & 观察者 服务员 事件(Event) 被观察者 & 观察者 沟通的载体 菜式 5.2 具体描述 请结合上述 顾客到饭店吃饭 的生活例子理解: 5.3...总结 RxJava原理可总结为: 被观察者 (Observable) 通过 订阅(Subscribe) 按顺序发送事件 给观察者 (Observer) 观察者(Observer) 按顺序接收事件 &...具体如下图: 至此,关于RxJava原理讲解完毕。 6.
Carson带你学RxJava系列文章,包括 原理、操作符、应用场景、背压等等,请看文章:Android:这是一份全面 & 详细的RxJava学习指南 目录 1....原理介绍 5.1 概述 Rxjava原理 基于 一种扩展的观察者模式,整个模式中有4个角色: 角色 作用 类比 被观察者(Observable) 产生事件 顾客 观察者(Observer) 接收事件,并给出响应动作...厨房 订阅(Subscribe) 连接 被观察者 & 观察者 服务员 事件(Event) 被观察者 & 观察者 沟通的载体 菜式 5.2 具体描述 请结合上述 顾客到饭店吃饭 的生活例子理解:...5.3 总结 RxJava原理可总结为: 被观察者 (Observable) 通过 订阅(Subscribe) 按顺序发送事件 给观察者 (Observer) 观察者(Observer) 按顺序接收事件...具体如下图: 至此,关于RxJava原理讲解完毕。 6. 总结 本文主要对 Rxjava 的原理进行图文讲解
订阅观察者成功则会执行该方法。...(Observable):通过订阅行为(subscribe())把事件按顺序发送到 观察者(Observer)。...观察者(Observer):按顺序接收到事件&做出响应反馈。...reduce collect() 汇总发送事件数量 count() concatArray() concatArray可以将多个观察者组合在一起,然后按照之前发送顺序发送事件。...zip() zip会将多个被观察者合并,根据各个被观察者发送事件的顺序一个个结合起来,最终发送的事件数量会与源 Observable 中最少事件的数量一样。
RxJava简介 此处简单介绍RxJava 若还不了解RxJava,请看文章:Android:这是一篇 清晰 & 易懂的Rxjava 入门教程 2....订阅流程 的使用 2.1 使用步骤 RxJava的订阅流程 使用方式 = 基于事件流的链式调用,具体步骤如下: 步骤1:创建被观察者(Observable)& 定义需发送的事件 步骤2:创建观察者(Observer...调用source对象的subscribe() // source对象 = 使用步骤1(创建被观察者(Observable))中创建的ObservableOnSubscribe对象...void onSubscribe(@NonNull Disposable d); // 内部参数:Disposable 对象,可结束事件 void onNext(@NonNull...特别注意:涉及多个被观察者(Observable)的发送事件顺序 具体描述 实例讲解 /** * 存在涉及多个被观察者(Observable)的情况 **/ // 创建第1个被观察者
image.png 前言 今天开始聊聊Rxjava,这个神奇又难用又牛逼的框架。 先说说Rxjava两个关键词: 异步。Rxjava可以通过链式调用随意切换线程,同时又能保证代码的简洁。...观察者模式。Rxjava的核心,说白了就是一个观察者模式,通过观察者订阅被观察者这一层订阅关系来完成后续事件的发送等工作。...RxJava中的操作符 concatMap flatMap 这两个操作符的功能是一样的,都是将一个发射数据的Observable变换为多个Observables,然后将它们发射的数据放进一个单独的Observable...5,6,7,8); Observable.merge(odds,events).subscribe(i->Log.d("TAG","merge->"+i)); 区别在于concat操作符是在合并后按顺序串行执行...而zip操作符的特点是合并之后并行执行,发射事件和最少的一个相同,什么意思呢?
调用source对象的subscribe() // source对象 = 使用步骤1(创建被观察者(Observable))中创建的ObservableOnSubscribe...步骤2:创建观察者 & 定义响应事件的行为 源码分析 /** * 使用步骤2:创建观察者 & 定义响应事件的行为(方法内的创建对象代码) **/ subscribe(new Observer...void onSubscribe(@NonNull Disposable d); // 内部参数:Disposable 对象,可结束事件 void onNext(@NonNull...特别注意:涉及多个被观察者(Observable)的发送事件顺序 具体描述 ?...实例讲解 /** * 存在涉及多个被观察者(Observable)的情况 **/ // 创建第1个被观察者(Observable1) Observable.create(new
来决定(理论上多个CommandKey是可以共用同一个线程池资源的),并且有全局缓存(不会每次都执行初始化动作)。...---- RxJava相关概念 rx.Scheduler.Worker:它是Scheduler的一个静态内部类,用于在单个线程或事件循环上执行操作的顺序调度程序,简单的说它就是真正干活的 Hystrix...,所以执行顺序是乱的。...但是,肯定的顺序是:先发送,再消费。 ---- 针对RxJava里的rx.Scheduler.Worker和Scheduler在Hystrix都提供了其扩展实现。...文首介绍RxJava时候说到了,被观察对象Observable在哪个线程发射数据是由subscribeOn()方法指定的Scheduler来调度的。
发射的每一项数据应用一个函数,然后按顺序依次发射这些值 window — 窗口,定期将来自 Observable 的数据分拆成一些 Observable 窗口,然后发射这些窗口,而不是每次发射一项。...merge — 将多个 Observable 合并为一个。不同于concat,merge不是按照添加顺序连接,而是按照时间线来连接。 start_with — 在数据序列的开头增加一项数据。...如果多个 Observable 发射的数据量不一样,则以最少的Observable 为标准进行压合。 concat — 按顺序连接多个 Observable。...publish 将一个普通的 Observable 转换为可连接的,可连接的Observable 和普通的Observable差不多,不过它并不会在被订阅时开始发射数据,而是直到使用了 Connect...比如我们这里需要有多个观察者订阅的时候。 3.2 从网络地址中获取数据 需求描述: 获取新浪的美股接口数据,并打印出股票名和价格 代码如下: ?
for the Java VM”,即“Java虚拟机上的使用可观测序列进行可组合可异步的基于事件的编程的库”。...简单的说,RxJava采用的是观察者模式,代表被观察的数据源的类叫Observable,而代表观察Observable并作出响应的观察者的类叫Subscriber(其实Subscriber是一个实现了Observer...最后得到的序列上就只有我们感兴趣的数据,观察者无需等待数据生成,创建并订阅后只需响应序列上传来的最新数据即可,因此使用RxJava的代码是异步的。...,变换的详情可以从链式调用的顺序得知,因此整体代码显得特别的简洁易读和容易拓展,使用这套框架开发能够有效节省阅读代码带来的精力和时间成本。...因此这里会把原序列中的"RxJava"这个String对象过滤掉,因为只有这个String对象的长度不小于6。代码执行的结果如下: Hello World onCompleted!!
领取专属 10元无门槛券
手把手带您无忧上云