rxjava2 基础讲解

145 阅读2分钟

Observable和Observer

被观察者除了Flowable以外还有Observable,它的使用方法和Flowable大体相似,也是使用create()创建:

//被观察者 Observable observable = Observable.create(new ObservableOnSubscribe() {

@Override
public void subscribe(ObservableEmitter<String> e) throws Exception {
    //订阅观察者时的操作
    e.onNext("test1");
    e.onNext("test2");
    e.onComplete();
}

});//没有背压设置

Observable和Flowable

下面我们观察下上面两个例子,发现Observable和Flowable其中前者不需要背压(BackPressure)参数和请求资源(request)操作,其他都是大体相似的,那么他们两个有什么区别呢?分别什么时候用呢?

这两者区别十分明显,Observable不支持背压,而Flowable支持背压(背压是什么?后面再说,先明白区别)。关键是什么时候用呢,下面根据官方的建议:

使用Observable - 不超过1000个元素、随着时间流逝基本不会出现OOM - GUI事件或者1000Hz频率以下的元素 - 平台不支持Java Steam(Java8新特性) - Observable开销比Flowable低

使用Flowable - 超过10k+的元素(可以知道上限) - 读取硬盘操作(可以指定读取多少行) - 通过JDBC读取数据库 - 网络(流)IO操作

BackPressure(背压) 了解了Observable和Flowable的区别,我们还不知什么叫做背压,下面我们来简单了解下概念。所谓背压就是生产者(被观察者)的生产速度大于消费者(观察者)消费速度从而导致的问题。

举一个简单点的例子,如果被观察者快速发送消息,但是观察者处理消息的很缓慢,如果没有特定的流(Flow)控制,就会导致大量消息积压占用系统资源,最终导致十分缓慢。

怎么优化和减少这种情况后面再探讨,不过可以注意到,Flowable创建的时候已经设置了BackpressureStrategy,而且Subscriber使用了request来控制最大的流量。