前言
每个Android开发者,都是爱RxJava的,简洁线程切换和多网络请求合并,再配合Retrofit,简直是APP开发的福音。不知不觉,RxJava一路走来,已经更新到第三大版本了。不像RxJava 2对RxJava 1那么残忍,RxJava 3对RxJava 2的兼容性还是挺好的,目前并没有做出很大的更改。RxJava2到2020年12月31号不再提供支持,错误的会同时在2.x和3.x修复,但新功能只会在3.x上添加。
同时,希望通过本文,能知道垃圾箱颜色分类。
作为尝鲜,赶紧品尝吧。
主要变化
主要特点
- 单一依赖:Reactive-Streams
- 继续支持Java 6+和Android 2.3+
- 修复了API错误和RxJava 2的许多限制
- 旨在替代RxJava 2,具有相对较少的二进制不兼容更改
- 提供Java 8 lambda友好的API
- 关于并发源的不同意见
- 异步或同步执行
- 参数化并发的虚拟时间和调度程序
- 为测试schedulers,consumers和plugin hooks提供测试和诊断支持
与RxJava 2的主要区别是:
- 将eagerTruncate添加到replay运算符,以便head节点将在截断时丢失它保留的项引用
- 新增 X.fromSupplier()
- 使用 Scheduler 添加 concatMap,保证 mapper 函数的运行位置
- 新增 startWithItem 和 startWithIterable
- ConnectableFlowable/ConnetableFlowable 重新设计
- 将 as() 并入 to()
- 更改 Maybe.defaultIfEmpty() 以返回 Single
- 用 Supplier 代替 Callable
- 将一些实验操作符推广到标准
- 从某些主题/处理器中删除 getValues()
- 删除 replay(Scheduler) 及其重载
- 删除 dematerialize()
- 删除 startWith(T|Iterable)
- 删除 as()
- 删除 Maybe.toSingle(T)
- 删除 Flowable.subscribe(4 args)
- 删除 Observable.subscribe(4 args)
- 删除 Single.toCompletable()
- 删除 Completable.blockingGet()
入门
1、添加依赖
implementation "io.reactivex.rxjava3:rxjava:3.0.0-RC0"
不好意思哦,还没看到RxAndroid出3.0,这就很尴尬了...
2、一些概念
2.1、上流、下流
在RxJava,数据以流的方式组织。也就是说,Rxjava包括一个源的数据流,数据流后跟着消费者的零个到多个消费数据流步骤。
source
.operator1()
.operator2()
.operator3()
.subscribe(consumer)
在上文代码中,对于operator2来说,在它前面叫做上流,在它后面的叫做下流。憋住,别笑,真的是下流来的。
2.2、流的对象
在RxJava的文档中,emission, emits, item, event, signal, data and message都被认为在数据流中被传递的数据对象。
2.3、背压(Backpressure)
当数据流通过异步的步骤执行时,这些步骤的执行速度可能不一致。也就是说上流数据发送太快,下流没有足够的能力去处理。为了避免这种情况,一般要么缓存上流的数据,要么抛弃数据。但这种处理方式,有时会带来很大的问题。为此,RxJava带来了backpressure的概念。背压是一种流量的控制步骤,在不知道上流还有多少数据的情形下控制内存的使用,表示它们还能处理多少数据。
支持背压的有Flowable类,不支持背压的有Observable,Single, Maybe and Completable类。
2.4 线程调度器(Schedulers)
对于我们Android开发来说,最喜欢的就是它简洁切换线程的操作。RxJava通过调度器来方便线程的切换。
- Schedulers.computation(): 适合运行在密集计算的操作,大多数异步操作符使用该调度器。
- Schedulers.io():适合运行I/0和阻塞操作.
- Schedulers.single():适合需要单一线程的操作
- Schedulers.trampoline(): 适合需要顺序运行的操作
在不同平台还有不同的调度器,例如Android的主线程:AndroidSchedulers.mainThread()
Flowable.range(1, 10)
.observeOn(Schedulers.computation())
.map(v -> v * v)
.blockingSubscribe(System.out::println);
2.5 基类
在 RxJava 3 可以发现有以下几个基类(跟RxJava 2是一致的吧):
- io.reactivex.Flowable:发送0个N个的数据,支持Reactive-Streams和背压
- io.reactivex.Observable:发送0个N个的数据,不支持背压,
- io.reactivex.Single:只能发送单个数据或者一个错误
- io.reactivex.Completable:没有发送任何数据,但只处理 onComplete 和 onError 事件。
- io.reactivex.Maybe:能够发射0或者1个数据,要么成功,要么失败。
不建议再往下看了,建议点赞或收藏...
下文关于操作符内容太多了
等需要了,再来查阅
下班时间还是好好护发吧
精彩内容请看下回分解~(多种操作符代码详解)
最后
不管怎么说,大家技术还是要学好的。小编下面给大家分享一份成为高级工程师学习路线,如果想学习高级UI、性能优化、移动架构师、 NDK、混开发等Android高阶开发的朋友可以加下我的Android架构群:887084983,还有免费的学习资料及面试资料领取~
如果你觉得文章写得不错就给个赞呗?如果你觉得那里值得改进的,请给我留言。一定会认真查询,修正不足。谢谢。
Android架构师之路很漫长,一起共勉吧!
相关推荐
适合由vue2.0转到vue3.0的前端朋友
总结来说,UFS2.0与UFS3.0都是为了满足移动设备高速、低功耗存储需求而设计的接口标准。UFS2.0以其较高的初始传输速率和低功耗特性,为当时的设备提供了显著的性能提升。而UFS3.0则在速度和效率上更进一步,通过更高...
2--[2019春节美篇].zip源码scratch2.0 3.0编程项目源文件源码案例素材源代码2--[2019春节美篇].zip源码scratch2.0 3.0编程项目源文件源码案例素材源代码2--[2019春节美篇].zip源码scratch2.0 3.0编程项目源文件源码...
40--[未来校园之作业篇].zip源码scratch2.0 3.0编程项目源文件源码案例素材源代码40--[未来校园之作业篇].zip源码scratch2.0 3.0编程项目源文件源码案例素材源代码40--[未来校园之作业篇].zip源码scratch2.0 3.0编程...
3--[再见,2018——纪念篇].zip源码scratch2.0 3.0编程项目源文件源码案例素材源代码3--[再见,2018——纪念篇].zip源码scratch2.0 3.0编程项目源文件源码案例素材源代码3--[再见,2018——纪念篇].zip源码scratch...
本篇将围绕“CSS2.0 3.0 API”这一主题,深入探讨CSS2和CSS3之间的差异以及它们各自的关键特性。 首先,我们来回顾一下CSS2.0的核心知识点。CSS2.0是在1998年发布的,它极大地扩展了CSS1的功能,引入了浮动、定位、...
45--[《植物大战僵尸》 口算篇 - 小数].zip源码scratch2.0 3.0编程项目源文件源码案例素材源代码45--[《植物大战僵尸》 口算篇 - 小数].zip源码scratch2.0 3.0编程项目源文件源码案例素材源代码45--[《植物大战僵尸...
31--[自做Sans战【未完成_节奏动作篇】].zip源码scratch2.0 3.0编程项目源文件源码案例素材源代码31--[自做Sans战【未完成_节奏动作篇】].zip源码scratch2.0 3.0编程项目源文件源码案例素材源代码31--[自做Sans战...
最早的SD卡是从MMC卡发展而来的,目前SD卡有三种规范——SD1.0、SD2.0和SD3.0,SD1.0已经不用了,目前主流的规范是SD2.0和SD3.0,SD2.0被称为高速卡,传输速度在2MB/s以上,SD3.0被称为超高速卡,传输速度可达104MB/...
总的来说,CSS3.0手册和Web2.0 PS样式是前端设计的重要组成部分,它们与jQuery、Java、Q+、Google+和Ruby等技术相结合,共同构建了现代Web应用的基石,推动着互联网技术不断发展和创新。理解和掌握这些知识点,对于...
在Android应用开发中,组合使用Kotlin、MVP(Model-View-Presenter)设计模式、Retrofit2.0网络库、RxJava1.0响应式编程框架以及Dagger2依赖注入框架,是一种常见的高效开发方式。这篇内容将深入探讨这些技术在实际...
### Swift3.0数据处理基础篇 #### 一、引言 Swift 作为一种现代编程语言,在苹果生态中占据了举足轻重的地位。随着版本的不断更新,Swift 的数据处理能力也在不断增强。本篇将深入探讨 Swift 3.0 在数据处理方面的...
【标题】"安卓开发进阶之RxJava2在实际项目中使用--第三篇"主要讲述了...总的来说,这篇文章应该是一份实用的指南,帮助开发者理解如何将RxJava2和Realm这两个强大的工具结合起来,提升Android应用的开发效率和质量。
本书《ASP.NET 2.0入门经典:C#编程篇》显然是针对初学者设计的,旨在帮助读者掌握使用C#语言进行ASP.NET 2.0开发的基础知识。 1. **.NET Framework**:.NET Framework是ASP.NET的基础,它提供了一组类库、运行时...
本篇文章将深入探讨RxJava在实际项目中的应用,帮助开发者们从基础到进阶,理解并掌握这一技术。 首先,我们要了解什么是RxJava。RxJava是Reactive Extensions(RX)的Java实现,是一个用于处理异步数据流和事件的...
本篇文章将深入探讨这三个组件的基础知识,以及如何进行封装和在实际项目中使用。 首先,Retrofit2是由Square公司开发的一款HTTP客户端,它允许开发者通过简单的注解来定义接口,实现与RESTful API的无缝对接。...
这意味着在一个x16的连接上,双向带宽可以达到32 GB/s(4 GB/s x16通道),这对于高性能计算、图形渲染等领域来说意义重大。 ##### 2. 功能增强与新增特性 - **可信配置空间(Trusted Configuration Space)**:为...
RxJava2与Retrofit2是老搭档了,之前写了一篇《RxJava和Retrofit2的统一处理单个请求》,是用的Rxjava1.0,本次使用Rxjava2.0与Retrofit2进行封装,一样整洁、简单、实用。Rxjava2相比Rxjava1优化和改动不少了东西,...
- 对于初学者来说,建议保留默认设置,以免因设置不当导致软件无法正常使用。 #### 四、小结 TC 3.0的安装流程相对简单,但每个步骤都至关重要。通过以上详细介绍,相信用户已经能够顺利地完成TC 3.0的安装,并...
总的来说,结合Retrofit和RxJava2,可以实现优雅的网络请求管理,同时提供强大的异步处理能力。这不仅简化了代码,还提高了代码的可读性和可维护性。通过熟练掌握这两者,你可以大大提高Android应用的开发效率和质量...