本文由
南尘2251
投稿。
南尘2251
的博客地址:
http://www.jianshu.com/u/f690947ed5a6
这可能是最好的RxJava 2.x入门教程系列专栏,文章链接:
-
这可能是最好的RxJava 2.x 入门教程(一)
http://www.jianshu.com/p/a93c79e9f689
-
这可能是最好的RxJava 2.x 入门教程(二)
http://www.jianshu.com/p/b39afa92807e
-
这可能是最好的RxJava 2.x 入门教程(三)
http://www.jianshu.com/p/e9c79eacc8e3
-
这可能是最好的RxJava 2.x 入门教程(四)
http://www.jianshu.com/p/c08bfc58f4b6
-
这可能是最好的RxJava 2.x 入门教程(五)
http://www.jianshu.com/p/81fac37430dd
为了满足大家的需求,GitHub将同步更新代码,主要包含基本的代码封装,RxJava 2.x所有操作符应用场景介绍和实际应用场景,后期除了RxJava可能还会增添其他东西,总之,GitHub上的Demo专为大家倾心打造。
传送门:
https://github.com/nanchen2251/RxJava2Examples
提升开发效率,降低维护成本一直是开发团队永恒不变的宗旨。近两年来国内的技术圈子中越来越多的开始提及 RxJava ,越来越多的应用和面试中都会有 RxJava ,而就目前的情况,Android 的网络库基本被 Retrofit + OkHttp 一统天下了,而配合上响应式编程 RxJava 可谓如鱼得水。
想必大家肯定被近期的 Kotlin 炸开了锅,笔者也在闲暇之时去了解了一番(作为一个与时俱进的有理想的青年怎么可能不与时俱进?),发现其中有个非常好的优点就是简洁,支持函数式编程。
是的, RxJava 最大的优点也是简洁,但它不止是简洁,而且是 随着程序逻辑变得越来越复杂,它依然能够保持简洁 (这货洁身自好呀有木有)。
咳咳,要例子,猛戳这里:
给 Android 开发者的 RxJava 详解
http://gank.io/post/560e15be2dca930e00da1083
上面我们提及了响应式编程,不少人对它可谓一脸懵逼,那什么是响应式编程呢?响应式编程是一种基于异步数据流概念的编程模式。数据流就像一条河:它可以被观测,被过滤,被操作,或者为新的消费者与另外一条流合并为一条新的流。
响应式编程的一个关键概念是事件。事件可以被等待,可以触发过程,也可以触发其它事件。事件是唯一的以合适的方式将我们的现实世界映射到我们的软件中:如果屋里太热了我们就打开一扇窗户。
同样的,当我们的天气app从服务端获取到新的天气数据后,我们需要更新app上展示天气信息的UI;汽车上的车道偏移系统探测到车辆偏移了正常路线就会提醒驾驶者纠正,就是是响应事件。
今天,响应式编程最通用的一个场景是UI:我们的移动App必须做出对网络调用、用户触摸输入和系统弹框的响应。在这个世界上,软件之所以是事件驱动并响应的是因为现实生活也是如此。
为什么出了一个系列后还有完结版?
RxJava 这些年可谓越来越流行,而在去年的晚些时候发布了2.0正式版。大半年已过,虽然网上已经出现了大部分的 RxJava 教程(其实细心的你还是会发现 1.x 的超级多)。
前些日子,笔者花了大约两周的闲暇之时写了 RxJava 2.x 系列教程,也得到了不少反馈,其中就有不少读者觉得每一篇的教程太短,抑或是希望更多的侧重适用场景的介绍,在这样的大前提下,这篇完结版教程就此诞生,仅供各位采纳。
RxJava 2.x 已经按照 Reactive-Streams specification 规范完全的重写了,maven也被放在了io.reactivex.rxjava2:rxjava:2.x.y 下,所以 RxJava 2.x 独立于 RxJava 1.x 而存在。
而随后官方宣布的将在一段时间后终止对 RxJava 1.x 的维护,所以对于熟悉 RxJava 1.x 的自然可以直接看一下 2.x 的文档(
http://reactivex.io/RxJava/2.x/javadoc/
)和异同就能轻松上手了,而对于不熟悉的,不要慌,本酱带你装逼带你飞,坐稳了:
https://github.com/nanchen2251/RxJava2Examples
你只需要在 build.gradle 中加上:
compile 'io.reactivex.rxjava2:rxjava:2.1.1'(2.1.1为写此文章时的最新版本)
RxJava 2.x 拥有了新的特性,其依赖于4个基础接口,它们分别是
-
Publisher
-
Subscriber
-
Subscription
-
Processor
其中最核心的莫过于 Publisher 和 Subscriber。Publisher 可以发出一系列的事件,而 Subscriber 负责和处理这些事件。
其中用的比较多的自然是 Publisher 的 Flowable,它支持背压。关于背压给个简洁的定义就是:
背压是指在异步场景中,被观察者发送事件速度远快于观察者的处理速度的情况下,一种告诉上游的被观察者降低发送速度的策略。
简而言之,背压是流速控制的一种策略。
有兴趣的可以看一下官方对于背压的讲解
https://github.com/ReactiveX/RxJava/wiki/Backpressure
。
可以明显地发现,RxJava 2.x 最大的改动就是对于 backpressure 的处理,为此将原来的 Observable 拆分成了新的 Observable 和 Flowable,同时其他相关部分也同时进行了拆分,但令人庆幸的是,是它,是它,还是它,还是我们最熟悉和最喜欢的 RxJava。
大家可能都知道, RxJava 以观察者模式为骨架,在 2.0 中依旧如此。
不过此次更新中,出现了两种观察者模式:
在 RxJava 2.x 中,Observable 用于订阅 Observer,不再支持背压(1.x 中可以使用背压策略),而 Flowable 用于订阅 Subscriber , 是支持背压(Backpressure)的。
在 RxJava 1.x 中,我们最熟悉的莫过于 Observable 这个类了,笔者在刚刚使用 RxJava 2.x 的时候,创建了 一个 Observable,瞬间一脸懵逼有木有,居然连我们最最熟悉的 Subscriber 都没了,取而代之的是 ObservableEmmiter,俗称发射器。
此外,由于没有了Subscriber的踪影,我们创建观察者时需使用 Observer。而 Observer 也不是我们熟悉的那个 Observer,又出现了一个 Disposable 参数带你装逼带你飞。
废话不多说,从会用开始,还记得 RxJava 的三部曲吗?
第一步:初始化 Observable
第二步:初始化 Observer
第三步:建立订阅关系