响应式编程是一种基于异步数据流概念的编程模式。数据流就像一条河:它可以被观测,被过滤,被操作,或者为新的消费者与另外一条流合并为一条新的流。响应式编程的一个关键概念是事件。事件可以被等待,可以触发过程,也可以触发其它事件。
RxJava 2.x 已经按照 Reactive-Streams specification 规范完全的重写了,maven也被放在了io.reactivex.rxjava2:rxjava:2.x.y
下。RxJava 2.x 拥有了新的特性,其依赖于4个基础接口,它们分别是
-
Publisher
-
Subscriber
-
Subscription
-
Processor
其中最核心的莫过于 Publisher
和 Subscriber
。Publisher
可以发出一系列的事件,而 Subscriber
负责和处理这些事件。
其中用的比较多的自然是 Publisher
的 Flowable
,它支持背压。关于背压给个简洁的定义就是:
背压是指在异步场景中,被观察者发送事件速度远快于观察者的处理速度的情况下,一种告诉上游的被观察者降低发送速度的策略。
简而言之,背压是流速控制的一种策略。 观察者模式
大家可能都知道, RxJava 以观察者模式为骨架,在 2.0 中依旧如此。
不过此次更新中,出现了两种观察者模式:
-
Observable ( 被观察者 ) / Observer ( 观察者 )
-
Flowable (被观察者)/ Subscriber (观察者)
在 RxJava 2.x 中,Observable 用于订阅 Observer,不再支持背压(1.x 中可以使用背压策略),而 Flowable 用于订阅 Subscriber , 是支持背压(Backpressure)的。
在 RxJava 1.x 中,我们最熟悉的莫过于 Observable
这个类了,笔者在刚刚使用 RxJava 2.x 的时候,创建了 一个 Observable
,瞬间一脸懵逼有木有,居然连我们最最熟悉的 Subscriber
都没了,取而代之的是 ObservableEmmiter
,俗称发射器。此外,由于没有了Subscriber
的踪影,我们创建观察者时需使用 Observer
网友评论