为了知足你们的饥渴难耐,GitHub将同步更新代码,主要包含基本的代码封装,RxJava 2.x全部操做符应用场景介绍和实际应用场景,后期除了RxJava可能还会增添其余东西,总之,GitHub上的Demo专为你们倾心打造。传送门:https://github.com/nanchen2251/RxJava2Exampleshtml
RxJava 对你们而言确定不陌生,其受欢迎程度不言而喻。而在去年的早些时候,官方便宣布,将在一段时间后再也不对 RxJava 1.x 进行维护,而在仓库中另辟蹊径,开始对 RxJava 2.x 进行推广起来,我本来是不想写这么一套教程的,由于 RxJava 受欢迎度这么高,并且这2.x也出来了这么久,我坚信网上必定有不少超级大牛早已为你们避雷。然而很难过的是,我搜索了些时间,能搜出来的基本都是对 RxJava 1.x 的讲解,或者是 Blog 标题就没说清楚是不是2.x系列(对于咱们这种标题党来讲很难受)。这不,我就来抛砖引玉了。java
我们先不提别的,先为你们带点可能你早已熟知的干货——来自扔物线大神的给Android开发者的RxJava详解。react
该文详细地为你们讲解了 RxJava 的优点、原理以及使用方式和适用情景,必定被众多的Android开发者视为神器。惋惜,文章历史比较久远,基本都是讲解的RxJava 1.x了。git
那关注的小伙伴必定会问,那我没用过 RxJava 1.x ,还有必要先学习 1.x 的内容吗?github
我的以为没必要要,由于RxJava 2.x 是按照Reactive-Streams specification规范彻底的重写的,彻底独立于RxJava 1.x 而存在,它改变了以往RxJava的用法。异步
额,因为我的能力水平有限,因此对于英文基础好的,你们能够去官网查阅相关API介绍,而对于英文不那么流畅的童鞋,我也为你们准备了干货:RxJava2Examples (正在更新)。post
其实,我标题为入门教程,按理说应该从简单入门开始讲的,原谅我忽然偏题了,由于我以为可能大多数人都了解或者使用过RxJava 1.x(由于它真的太棒了)。虽然可能熟悉1.x 的你能够直接扒文档就能够了,但这么大的变化,请原谅我还在这里瞎比比。学习
这是一个很大的变化,熟悉RxJava 1.x的童鞋必定都知道,1.x 是容许咱们在发射事件的时候传入 null 值的,但如今咱们的 2.x 不支持了,不信你试试? 大大的 NullPointerException 教你作人。这意味着 Observable<Void> 再也不发射任何值,而是正常结束或者抛出空指针。spa
在 RxJava 1.x 中关于介绍 backpressure 部分有一个小小的遗憾,那就是没有用一个单独的类,而是使用 Observable 。而在 2.x 中 Observable 不支持背压了,将用一个全新的 Flowable 来支持背压。线程
或许对于背压,有些小伙伴们还不是特别理解,这里简单说一下。大概就是指在异步场景中,被观察者发送事件的速度远快于观察者的处理速度的状况下,一种告诉上游的被观察者下降发送速度的策略。感兴趣的小伙伴能够模拟这种状况,在差距太大的时候,咱们的内存会猛增,直到OOM。而咱们的 Flowable 必定意义上能够解决这样的问题,但其实并不能彻底解决,这个后面可能会提到。
其实这三者都差很少,Single 顾名思义,只能发送一个事件,和 Observable 接受可变参数彻底不一样。而Completable 侧重于观察结果,而Maybe 是上面两种的结合体。也就是说,当你只想要某个事件的结果(true or false)的时候,你可使用这种观察者模式。
这一块基本没什么改动,但细心的小伙伴必定会发现,RxJava 2.x 中已经没有了Schedulers.immediate() 这个线程环境,还有Schedulers.test()。
熟悉 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 的改动细节,仅供参考。