龙空技术网

这可能是最好的RxJava 2.x 入门教程(一)

码仔 209

前言:

此时你们对“java中x”可能比较重视,我们都需要了解一些“java中x”的相关资讯。那么小编同时在网络上汇集了一些对于“java中x””的相关资讯,希望小伙伴们能喜欢,朋友们一起来了解一下吧!

本教程将分为六篇文章为大家讲解Rxjava常用api,简单易懂,超级实用,无论你是大神还是菜鸟,该系列文章对你来说都是一道上好佳肴。持续关注吧。

这可能是最好的RxJava 2.x 入门教程(二)

这可能是最好的RxJava 2.x 入门教程(三)

这可能是最好的RxJava 2.x 入门教程(四)

这可能是最好的RxJava 2.x 入门教程(五)

正文

为了满足大家的饥渴难耐,GitHub将同步更新代码。http主要包含基本的代码封装,RxJava 2.x所有操作符应用场景介绍和实际应用场景,后期除了RxJava可能还会增添其他东西,总之,GitHub上的Demo专为大家倾心打造。传送门:所有连接都在文章末尾

RxJava 对大家而言肯定不陌生,其受欢迎程度不言而喻。而在去年的早些时候,官方便宣布,将在一段时间后不再对 RxJava 1.x 进行维护,而在仓库中另辟蹊径,开始对 RxJava 2.x 进行推广起来,我原本是不想写这么一套教程的,因为 RxJava 受欢迎度这么高,而且这 2.x 也出来了这么久,我坚信网上一定有很多超级大牛早已为大家避雷。然而很难过的是,我搜索了些时间,能搜出来的基本都是对 RxJava 1.x 的讲解,或者是 Blog 标题就没说清楚是否是 2.x 系列(对于我们这种标题党来说很难受)。这不,我就来抛砖引玉了。

咱们先不提别的,先为大家带点可能你早已熟知的干货——来自扔物线大神的给Android开发者的 RxJava 详解(文章末尾)。

该文详细地为大家讲解了 RxJava 的优势、原理以及使用方式和适用情景,一定被众多的 Android 开发者视为神器。可惜,文章历史比较久远,基本都是讲解的 RxJava 1.x了。

那关注的小伙伴一定会问,那我没用过 RxJava 1.x ,还有必要先学习 1.x 的内容吗?个人觉得不必要,因为 RxJava 2.x 是按照 Reactive-Streams specification规范完全的重写的,完全独立于 RxJava 1.x 而存在,它改变了以往 RxJava 的用法。由于个人能力水平有限,所以对于英文基础好的,大家可以去官网查阅相关 API 介绍,而对于英文不那么流畅的童鞋,我也为大家准备了干货:RxJava2Examples (正在更新 )。

与RxJava 1.x的差异

其实,我标题为入门教程,按理说应该从简单入门开始讲的,原谅我突然偏题了,因为我觉得可能大多数人都了解或者使用过RxJava 1.x(因为它真的太棒了)。虽然可能熟悉1.x 的你可以直接扒文档就可以了,但这么大的变化,请原谅我还在这里瞎比比。

s

这是一个很大的变化,熟悉 RxJava 1.x 的童鞋一定都知道,1.x 是允许我们在发射事件的时候传入 值的,但现在我们的 2.x 不支持了,不信你试试? 大大的 PointerException教你做人。这意味着Observable<Void>不再发射任何值,而是正常结束或者抛出空指针。

2、Flowable

在 RxJava 1.x 中关于介绍 backpressure部分有一个小小的遗憾,那就是没有用一个单独的类,而是使用Observable。而在 2.x 中Observable不支持背压了,将用一个全新的 Flowable 来支持背压。

或许对于背压,有些小伙伴们还不是特别理解,这里简单说一下。大概就是指在异步场景中,被观察者发送事件的速度远快于观察者的处理速度的情况下,一种告诉上游的被观察者降低发送速度的策略。感兴趣的小伙伴可以模拟这种情况,在差距太大的时候,我们的内存会猛增,直到OOM。而我们的 Flowable 一定意义上可以解决这样的问题,但其实并不能完全解决,这个后面可能会提到。

Single/Completable/Maybe

其实这三者都差不多,Single顾名思义,只能发送一个事件,和Observable接受可变参数完全不同。而Completable侧重于观察结果,而Maybe是上面两种的结合体。也就是说,当你只想要某个事件的结果(true or false)的时候,你可以使用这种观察者模式。

线程调度相关

这一块基本没什么改动,但细心的小伙伴一定会发现,RxJava 2.x 中已经没有了 Schedulers.immediate这个线程环境,还有Schedulers.test。

Function相关

熟悉 1.x 的小伙伴一定都知道,我们在1.x 中是有 Func1,Func2.....FuncN的,但 2.x 中将它们移除,而采用Function替换了Func1,采用BiFunction替换了Func 2..N。并且,它们都增加了 throws Exception,也就是说,妈妈再也不用担心我们做某些操作还需要 try-catch 了。

其他操作符相关

如 Func1...N的变化,现在同样用Consumer和BiConsumer对Action1和Action2进行了替换。后面的Action都被替换了,只保留了ActionN。

附录

下面从官方截图展示 2.x 相对 1.x 的改动细节,仅供参考。

文章内的超链接:

RxJava2Examples (正在更新 )

给Android开发者的 RxJava 详解:

近期文章:

等等,先别走!「码个蛋」又有活动了!参与活动不但可以培养自己的好习惯,还能拿到「码个蛋」IP系列专属奖品,速度要快...

今日问题:

各位猿佬们,Rxjava都上了么?哪些场景让你爱上Rxjava?

留言格式:

打卡 x 天,答:xxx。

告诉你一个小技巧:

只需3步,你将不会错过任何一篇文章!

标签: #java中x