`
Z_萧晓
  • 浏览: 10787 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

RxJava 2.0还没熟悉,RxJava 3.0说来就来了!(基础篇)

阅读更多

前言

每个Android开发者,都是爱RxJava的,简洁线程切换和多网络请求合并,再配合Retrofit,简直是APP开发的福音。不知不觉,RxJava一路走来,已经更新到第三大版本了。不像RxJava 2对RxJava 1那么残忍,RxJava 3对RxJava 2的兼容性还是挺好的,目前并没有做出很大的更改。RxJava2到2020年12月31号不再提供支持,错误的会同时在2.x和3.x修复,但新功能只会在3.x上添加。

 

同时,希望通过本文,能知道垃圾箱颜色分类。

 

作为尝鲜,赶紧品尝吧。

RxJava 2.0还没熟悉,RxJava 3.0说来就来了!(基础篇)

主要变化

主要特点

  • 单一依赖: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()

RxJava 2.0还没熟悉,RxJava 3.0说来就来了!(基础篇)

入门

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个数据,要么成功,要么失败。

不建议再往下看了,建议点赞或收藏...

下文关于操作符内容太多了

等需要了,再来查阅

下班时间还是好好护发吧

My GitHub

精彩内容请看下回分解~(多种操作符代码详解)

最后

不管怎么说,大家技术还是要学好的。小编下面给大家分享一份成为高级工程师学习路线,如果想学习高级UI、性能优化、移动架构师、 NDK、混开发等Android高阶开发的朋友可以加下我的Android架构群:887084983,还有免费的学习资料及面试资料领取~

如果你觉得文章写得不错就给个赞呗?如果你觉得那里值得改进的,请给我留言。一定会认真查询,修正不足。谢谢。

Android架构师之路很漫长,一起共勉吧!

0
0
分享到:
评论

相关推荐

    从vue2.0到vue3.0有这一篇就够了

    适合由vue2.0转到vue3.0的前端朋友

    UFS2.0_3.0.zip

    总结来说,UFS2.0与UFS3.0都是为了满足移动设备高速、低功耗存储需求而设计的接口标准。UFS2.0以其较高的初始传输速率和低功耗特性,为当时的设备提供了显著的性能提升。而UFS3.0则在速度和效率上更进一步,通过更高...

    华为数通实验手册(基础篇 进阶篇 )与知识手册V2.0.zip

    华为数通实验手册(基础篇 进阶篇 )与知识手册V2.0.zip

    OpenGL ES 2.0 and 3.0 编程指南(中英文)

    本篇将详细探讨OpenGL ES 2.0和3.0的编程指南,重点讲解这两个版本的核心概念、接口和最佳实践。 **OpenGL ES 2.0** OpenGL ES 2.0是移动设备上图形编程的一个重大转折点,引入了着色器语言(GLSL ES),将渲染...

    40--[未来校园之作业篇].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源码scratch2.0 3.0编程项目源文件源码案例素材源代码3--[再见,2018——纪念篇].zip源码scratch...

    45--[《植物大战僵尸》 口算篇 - 小数].zip源码scratch2.0 3.0编程项目源文件源码案例素材源代码

    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战【未完成_节奏动作篇】].zip源码scratch2.0 3.0编程项目源文件源码案例素材源代码31--[自做Sans战...

    通信控制篇——SD卡数据传输(一)

    最早的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.0PS样式

    总的来说,CSS3.0手册和Web2.0 PS样式是前端设计的重要组成部分,它们与jQuery、Java、Q+、Google+和Ruby等技术相结合,共同构建了现代Web应用的基石,推动着互联网技术不断发展和创新。理解和掌握这些知识点,对于...

    Kotlin-Android开发之MVP模式+Retrofit2.0+RxJava1.0+Dagger2框架封装代码

    在Android应用开发中,组合使用Kotlin、MVP(Model-View-Presenter)设计模式、Retrofit2.0网络库、RxJava1.0响应式编程框架以及Dagger2依赖注入框架,是一种常见的高效开发方式。这篇内容将深入探讨这些技术在实际...

    安卓开发进阶之RxJava2在实际项目中使用--第三篇

    【标题】"安卓开发进阶之RxJava2在实际项目中使用--第三篇"主要讲述了...总的来说,这篇文章应该是一份实用的指南,帮助开发者理解如何将RxJava2和Realm这两个强大的工具结合起来,提升Android应用的开发效率和质量。

    ASP.NET 2.0入门经典:C#编程篇.pdf

    本书《ASP.NET 2.0入门经典:C#编程篇》显然是针对初学者设计的,旨在帮助读者掌握使用C#语言进行ASP.NET 2.0开发的基础知识。 1. **.NET Framework**:.NET Framework是ASP.NET的基础,它提供了一组类库、运行时...

    安卓开发进阶之RxJava在实际项目中使用--第一篇

    本篇文章将深入探讨RxJava在实际项目中的应用,帮助开发者们从基础到进阶,理解并掌握这一技术。 首先,我们要了解什么是RxJava。RxJava是Reactive Extensions(RX)的Java实现,是一个用于处理异步数据流和事件的...

    PCIE spec 2.0 PCIE协议 2.0

    这意味着在一个x16的连接上,双向带宽可以达到32 GB/s(4 GB/s x16通道),这对于高性能计算、图形渲染等领域来说意义重大。 ##### 2. 功能增强与新增特性 - **可信配置空间(Trusted Configuration Space)**:为...

    RxJava2和Retrofit2封装教程(整洁、简单、实用)

    RxJava2与Retrofit2是老搭档了,之前写了一篇《RxJava和Retrofit2的统一处理单个请求》,是用的Rxjava1.0,本次使用Rxjava2.0与Retrofit2进行封装,一样整洁、简单、实用。Rxjava2相比Rxjava1优化和改动不少了东西,...

    scratch3.0初级篇33节课

    Scratch 3.0是麻省理工学院(MIT)的媒体实验室“终身幼儿园团队”开发的一款面向儿童的图形化编程工具,旨在通过游戏化学习,让孩子们在玩乐中掌握编程基础。本套初级篇33节课的课程设计充分考虑了初学者的需求,通过...

    TC 3.0安装说明.pdf

    - 对于初学者来说,建议保留默认设置,以免因设置不当导致软件无法正常使用。 #### 四、小结 TC 3.0的安装流程相对简单,但每个步骤都至关重要。通过以上详细介绍,相信用户已经能够顺利地完成TC 3.0的安装,并...

    spine3.0导出文件转换成cocos3.8可使用文件工具

    本篇文章将详细介绍如何利用特定的工具将Spine3.0导出的文件转换为Cocos3.8能够读取的格式。 首先,我们要理解Spine3.0与Spine2.0之间的差异。Spine3.0引入了更多先进的动画特性,如IK(Inverse Kinematics)和插值...

    Android开发丶使用RxJava来完成倒计时功能

    在Android开发中,为了实现各种动态效果和异步操作,开发者常常会利用强大的库来简化工作,其中之一就是RxJava。本篇文章将详细讲解如何利用RxJava来实现倒计时功能,这种功能通常在注册页面的发送验证码场景中使用...

Global site tag (gtag.js) - Google Analytics