首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Java 设计模式最佳实践:六、让我们开始反应式吧

RxJava 简介 安装 RxJava观察对象流动对象观察者和订阅 创建可观察对象 变换可观察对象 过滤可观察对象 组合可观察对象 错误处理 调度者 主题 示例项目 什么是反应式编程?...一旦数据可用,就调用流的相关观察者来处理数据;相反,拉机制同步方式获取信息。...在下面的部分,我们将学习它的功能以及如何使用它。 可观察对象流动对象观察者和订阅者 在 ReactiveX 观察者订阅一个可观察对象。...它们被称为“连接的”可观察对象RxJava 拥有能够创建此类可观察对象的操作符。 RxJava2.0 引入了一种新的可观察类型,称为Flowable。...,将两个可观察对象发出的项目加入到组 下面的示例使用join组合两个可观察对象,一个每 100 毫秒触发一次,另一个每 160 毫秒触发一次,并每 55 毫秒第一个获取一个,每 85 毫秒第二个获取一个

1.7K20

Android RxJava应用:变换操作符

原理 应用场景 数据类型转换 具体使用 下面使用Map() 将事件的参数 整型 变换成 字符串类型 为例子说明 // 采用RxJava基于事件流的链式操作...使用Map变换操作符的Function函数对被观察者发送的事件进行统一变换:整型变换成字符串类型 }).map(new Function() {...,最后再进行发送 原理 为事件序列每个事件都创建一个 Observable 对象; 将对每个 原始事件 转换后的 新事件 都放入到对应 Observable对象; 将新建的每个Observable...被观察者(Obervable)需要发送的事件 获取一定数量的事件 & 放到缓存区,最终发送 原理 应用场景 缓存被观察者发送的事件 具体使用 那么,Buffer()每次是获取多少个事件放到缓存区的呢...// 设置缓存区大小 & 步长 // 缓存区大小 = 每次观察获取的事件数量

40920
您找到你想要的搜索结果了吗?
是的
没有找到

Android RxJava操作符详解系列: 变换操作符

应用场景 数据类型转换 具体使用 下面使用Map() 将事件的参数 整型 变换成 字符串类型 为例子说明 ?...使用Map变换操作符的Function函数对被观察者发送的事件进行统一变换:整型变换成字符串类型 }).map(new Function() {...注:新合并生成的事件序列顺序是有序的,即 严格按照旧序列发送事件的顺序 ---- 3.4 Buffer() 作用 定期观察者(Obervable)需要发送的事件 获取一定数量的事件 &...应用场景 缓存被观察者发送的事件 具体使用 那么,Buffer()每次是获取多少个事件放到缓存区的呢?.../ 设置缓存区大小 & 步长 // 缓存区大小 = 每次观察获取的事件数量

76640

Java 设计模式最佳实践:6~9

RxJava 简介 安装 RxJava观察对象流动对象观察者和订阅 创建可观察对象 变换可观察对象 过滤可观察对象 组合可观察对象 错误处理 调度者 主题 示例项目 什么是反应式编程?...在下面的部分,我们将学习它的功能以及如何使用它。 可观察对象流动对象观察者和订阅者 在 ReactiveX 观察者订阅一个可观察对象。...它们被称为“连接的”可观察对象RxJava 拥有能够创建此类可观察对象的操作符。 RxJava2.0 引入了一种新的可观察类型,称为Flowable。...,将两个可观察对象发出的项目加入到组 下面的示例使用join组合两个可观察对象,一个每 100 毫秒触发一次,另一个每 160 毫秒触发一次,并每 55 毫秒第一个获取一个,每 85 毫秒第二个获取一个...:指示可观察对象发出函数提供的默认,以防出现错误 onErrorReturnItem:指示可观察对象发出提供的缺省,以防出现错误 onExceptionResumeNext:指示一个可观察对象将控制传递给另一个观察对象

1.7K10

RxJava 详解

前言 我去年开始使用 RxJava ,到现在一年多了。今年加入了 Flipboard 后,看到 Flipboard 的 Android 项目也在使用 RxJava ,并且使用的场景越来越多 。...当然,这也得益于我们可以随意定制自己程序观察者和被观察者,而警察叔叔明显无法要求小偷『你在作案的时候务必通知我』。 OnClickListener 的模式大致如下图: ?...需要注意的是,onCompleted()和onError()二者也是互斥的,即在队列调用了其中一个,就不应该再调用另一个RxJava观察者模式大致如下图: ?...打印字符串数组 将字符串数组names的所有字符串依次打印出来: ? b....下面我用对比的方式来介绍 Retrofit 的 RxJava 版 API 和传统版本的区别。 获取一个User对象的接口作为例子。

1.7K10

初识RxJava 2 for Android

在本系列文章最后你将会掌握所有 **RxJava 2 **的要素,然后你就可以开始编写高度响应式的App,可以处理各种同步和异步数据。所有这些更加简洁和管理的代码都能使用Java实现。...为创建这种数据流的工作流和响应它们的对象RxJava 扩展了 Observer 设计模式(观察者模式)。...本质上,在 RxJava 由 Observable 对象发射数据流然后终止,由 Observer 对象订阅 Observable 。...通常无论何时都需要把一些后台任务的结果发送到UI,必须创建一个专用的Handler。 再者,RxJava 有一个更直接的解决方案。...由于观察无法观察到数据是怎样创建的,可以随意定制 Observable 来创建数据。

1.1K60

Carson带你学Android:RxJava创建操作符

应用场景 & 对应操作符 介绍 注:在使用RxJava 2操作符前,记得在项目的Gradle添加依赖: dependencies { compile 'io.reactivex.rxjava2...,即依赖不能同时存在 } 3.1 基本创建 需求场景 完整的创建被观察对象 对应操作符类型 create() 作用 完整创建1个被观察对象(Observable) RxJava 创建被观察对象最基本的操作符...创建被观察对象(Observable)传入数组 // 在创建后就会将该数组转换成Observable & 发送该对象的所有数据 Observable.fromArray...创建被观察对象(Observable)传入数组 // 在创建后就会将该数组转换成Observable & 发送该对象的所有数据 Observable.fromArray...对象里的数据是最新的 应用场景 动态创建被观察对象(Observable) & 获取最新的Observable对象数据 具体使用 <-- 1.

54820

Android RxJava操作符详解系列: 创建操作符

,即依赖不能同时存在 } 3.1 基本创建 需求场景 完整的创建被观察对象 对应操作符类型 create() 作用 完整创建1个被观察对象(Observable) RxJava 创建被观察对象最基本的操作符...创建被观察对象(Observable)传入数组 // 在创建后就会将该数组转换成Observable & 发送该对象的所有数据 Observable.fromArray...创建被观察对象(Observable)传入数组 // 在创建后就会将该数组转换成Observable & 发送该对象的所有数据 Observable.fromArray...对象,这可以确保Observable对象里的数据是最新的 应用场景 动态创建被观察对象(Observable) & 获取最新的Observable对象数据 具体使用 <-- 1....interval() 作用 快速创建1个被观察对象(Observable) 发送事件的特点:每隔指定时间 就发送 事件 发送的事件序列 = 0开始、无限递增1的的整数序列 具体使用

65820

Android RxJavaRxAndroid结合Retrofit使用

概述 RxJava是一个在 Java VM 上使用可观测的序列来组成异步的、基于事件的程序的库。更重要的是:使用RxJava在代码逻辑上会非常简洁明了,尤其是在复杂的逻辑上。告别迷之缩进。...下面简单介绍下观察者模式,熟练掌握观察者模式跳过这一小节。 观察者模式 假设现在有两个对象A和B,在A发生某种变化时要主动通知B。这就是观察者模式。...在事件处理过程中出异常,onError() 会被触发,同时队列自动终止,不允许再有事件发出。 onCompleted() 和 onError()在一个队列只能调用一个,并且是最后一个。...MainActivity#getWeatherInfoByFlatMap() 使用.map方法只能返回一个,属于一对一类型。RxJava给我们提供一个更神奇的方法.flatMap()。...首先在.flatMap() 第一个参数为被观察者Observable的泛型WeatherInfo,第二个参数定义为另一个观察者,为了叙述方便,下文称第一个被观察者A,第二个参数即另一个观察者称为B

1.2K100

RxJava入门到不离不弃(一)——基本概念和使用

前言 RxJava的编程思想已经在Android开发者变得越来越流行。有个不好的点就是上手不太容易,尤其是大部分人之前都是使用命令式编程语言。...Observable:发射源,英文释义“可观察的”,在观察者模式称为“被观察者”或“可观察对象”; Observer:接收源,英文释义“观察者”,没错!...就是观察者模式的“观察者”,接收Observable、Subject发射的数据; Subject:Subject是一个比较特殊的对象,既可充当发射源,也充当接收源,为避免初学者被混淆,本章将不对Subject...( )方法,可以用来取消订阅事件; Action0:RxJava的一个接口,它只有一个无参call()方法,且无返回,同样还有Action1,Action2…Action9等,Action1封装了含有...上面的例子,计划表依次发出两个字符串,然后通知完成,之后的第三个字符串便不会再发送。也就是说,只要执行一次subscriber的onCompleted或onError方法,之后的事件就不会再发送。

71920

Android消息总线的演进之路:用LiveDataBus替代RxBus、EventBus

最后就是取消订阅的操作了,RxJava,订阅操作会返回一个Subscription对象,以便在合适的时机取消订阅,防止内存泄漏,如果一个类产生多个Subscription对象,我们可以用一个CompositeSubscription...正是由于LiveData对组件生命周期感知特点,因此可以做到仅在组件处于生命周期的激活状态才更新UI数据。 LiveData需要一个观察对象,一般是Observer类的具体实现。...当观察者的生命周期处于STARTED或RESUMED状态,LiveData会通知观察者数据变化;在观察者处于其他状态,即使LiveData的数据变化了,也不会通知。...LiveData 一个感知生命周期、可被观察的数据容器,它可以存储数据,还会在数据发生改变进行提醒。...然后会在步骤2把这个LifecycleBoundObserver放入一个私有Map容器mObservers

2.3K30

Carson带你学Android:图文详解RxJava背压策略

前言 Rxjava,由于其基于事件流的链式调用、逻辑简洁 & 使用简单的特点,深受各大 Android开发者的欢迎。 本文主要讲解的是RxJava的 背压控制策略,希望你们会喜欢。...背压策略的使用 在本节,我将结合 背压策略的原理 & Flowable的使用,为大家介绍在RxJava 2.0 该如何使用Flowable来实现背压策略功能,即背压策略的使用 Flowable与Observable...FlowableEmitter.requested(),有以下几种使用特性需要注意的: 情况1:叠加性 即:观察连续要求接收事件,被观察者会进行叠加并一起发送 Subscription.request...反向控制的原理是:通过RxJava内部固定调用被观察者线程的request(n) 从而 反向控制被观察者的发送事件速度 那么该什么时候调用被观察者线程的request(n) & n 的该是多少呢?...150个事件,点击按钮接收观察者接收了128个事件;再次点击接收无法接受事件,这说明超过缓存区大小的事件被丢弃了。

1.2K10

一篇文章就能了解Rxjava

前面已经提到他是基于Java观察者设计模式的,这个模式上面有给大家链接,可以去看看,这里不不坐过多的介绍,我们来介绍一下RxJava观察者模式: RxJava观察者模式 一、说明 1)RxJava...Action0 是 RxJava 的一个接口,它只有一个方法 call(),这个方法是无参无返回的;由于 onCompleted() 方法也是无参无返回的,因此 Action0 可以被当成一个包装对象...打印字符串数组 将字符串数组 names 的所有字符串依次打印出来: String[] names = ...; Observable.from(names) .subscribe(new...观察者模式本身的目的就是『后台处理,前台回调』的异步机制,因此异步对于 RxJava 是至关重要的。而要实现异步,则需要用到 RxJava另一个概念: Scheduler 。...这个问题先放着,我们还是 RxJava 线程控制的原理说起吧。

1.4K31

当Vert.x符合Reactive eXtensions(Vert.x简介的第5部分)

所以我们有另一个价值流​​。反应式编程的背后有一个基本的原则:事件即是数据,数据即是事件。 关于RX和异步编程的重要理解是流的异步特性。您会观察到一个流,并在流发出某个项目通知您。...RxJava是Java反应式库的通用语言,它提供以下五种类型来描述发布者: 流的项目数 RxJava 2种类型 RX签名 回调签名 未来的签名 通知,数据流 0..N 可观察流动 Observable...要启用密钥生成,我们使用该方法。观察结果获取结果并使用映射函数对其进行转换。这里我们只是调整选项。...该操作使用(返回a )完成。该操作者观察的两个给定的事件,并呼吁作为最后一个参数传递都已经完成了方法。在这种情况下,我们只是转发。...在这篇文章,我们调整了我们的代码,使用反应式编程和RxJava 2. Vert.x和RxJava的组合将您的反应性带到了另一个层次。您可以非常轻松地编写和处理异步操作和流。

2.6K20

Android RxJava:一文带你全面了解 背压策略

RxJava1.0 中被观察者的旧实现 Observable 对比 ? 好了,那么上图中在RxJava 2.0观察者模型,Flowable到底是什么呢?...背压策略的使用 在本节,我将结合 背压策略的原理 & Flowable的使用,为大家介绍在RxJava 2.0 该如何使用Flowable来实现背压策略功能,即背压策略的使用 Flowable与Observable...(a)的a // 该request(a)则是措施1讲解的方法,作用 = 设置 ....// 仅贴出关键代码 } 每个线程的requested()的返回 = 该线程的request...而在异步订阅关系,反向控制的原理是:通过RxJava内部固定调用被观察者线程的request(n) 从而 反向控制被观察者的发送事件速度 那么该什么时候调用被观察者线程的request(n) &...150个事件,点击按钮接收观察者接收了128个事件;再次点击接收无法接受事件,这说明超过缓存区大小的事件被丢弃了。

1.8K20

Rx Java 异步编程框架

名词定义 这里给出一些名词的翻译 Reactive 直译为反应性的,有活性的,根据上下文一般翻译为反应式、响应式; Iterable 迭代对象,支持迭代器的形式遍历,许多语言中都存在这个概念; Observable...可观察对象,在Rx定义为更强大的Iterable,在观察者模式是被观察对象,一旦数据产生或发生变化,会通过某种方式通知观察者或订阅者; Observer 观察对象,监听 Observable...:如果无法发射需要的,Single发射一个Throwable对象到这个方法 Single只会调用这两个方法的一个,而且只会调用一次,调用了任何一个方法之后,订阅关系终止。...方法,(如果单纯用于一对一转换则和 map 相同); 转换对象的能力不同: map 只能单一转换,单一只的是只能一对一进行转换,指一个对象可以转化为另一个对象但是不能转换成对象数组(map 返回结果集不能直接使用...from/just 再次进行事件分发,一旦转换成对象数组的话,再处理集合/数组的结果需要利用 for 循环遍历取出,而使用 RxJava 就是为了剔除这样的嵌套结构,使得整体的逻辑性更强。)

3K20

RxHttp 一条链发送请求,新一代Http请求神器(一)

看名字,我们可以理解为它就是一个请求发送者,通过一个from操作符,传入一个Param对象,然后返回一个RxJava的Observable对象,此时,我们就可以使用RxJava强大的操作符去处理相关的逻辑...(这就是简介说的,做到了与RxJava的无缝链接),在这,我们只是使用了subscribe操作符去订阅观察者。...Activity 销毁,自动关闭未完成的请求 上面的案例,在Activity/Fragment销毁,如果请求还未完成,就会造成Activity/Fragment 无法回收,导致内存泄漏。...当Activity/Fragment销毁,会将RxJava的管道中断,管道中断,又会将未完成的请求自动关闭。...数据解析器Parser 在上面的案例观察者拿到数据类型都是String类型,然后现实开发,我们经常需要对数据解析成我们想要的对象,RxHttp考虑到了这一点,现在我们就来看看如何的到我们想要的对象

82630

彻底搞清楚 RxJava 是什么东西

作为一种新的模式,在MVPView并不直接使用Model,它们之间的通信是通过Presenter来进行的,所有的交互都发生在Presenter内部,而在MVCView会直接Model读取数据而不是通过...rxjava原理简析 我想大家听说过如下Java的都知道如下Java采用的是一种扩展的观察者模式实现的,何为观察者模式:观察者模式是一种一对多的依赖关系,当一个对象改变状态,它会通知所有依赖者接受通知...观察者通过将被观察对象加到自己的观察队列,当被观察者发生改变,就会通知观察者东西已经改变。...而rxJava涉及到4个概念:Observable (可观察者,即被观察者)、 Observer (观察者)、 subscribe (订阅)、事件。...观察者模式本身的目的就是『后台处理,前台回调』的异步机制,因此异步对于 RxJava 是至关重要的。而要实现异步,则需要用到 RxJava另一个概念: Scheduler 。

18.7K104

RxJava之初体验

例如Android开发,我们就经常会遇到界面交互与后台网络操作相互混杂的情况,在一个界面,随着功能的添加与迭代,这些交互与网络操作会不断叠加,这会使得代码混乱,让人无法控制,而RxJava提供了一种对复杂流程的管理方法...、combine :提供多种方式创建操作流程; map、flatmap 提供执行过程传递参数的转换操作(1:1,1:n); subscribe() 关联观察者与被观察; Schedulers 设置执行序列所在线程...} }); } }).subscribeOn(Schedulers.io()) // 此处添加中间处理流程及对象转化操作...RxJava提供了基于Observable序列实现的异步调用,我们可以在Observable的创建可以添加多个事件,序列化执行,同时,在操作流程,可以使用map、flatMap将操作对象做1:1、1...:N的转化,转化之后的对仍是一个Observable序列,并添加在主序列(如网络请求数据转化,获取对象的集合属性,使用第三方库是需要对运行结果进行转化后使用)。

38930
领券