RxJava(七)背压Flowable

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/qq_39507260/article/details/84780970

RxJava背压Flowable

1.背压:在RxJava的异步场景中,被观察者发送数据太快,以至于操作符和订阅者来不及处理数据,造成buffer溢出。
2.Flowable:RxJava中专门用来支持背压,默认队列大小128,所有操作符强制支持背压。
3.背压策略:

public enum BackpressureStrategy{
        MISSING,    //通过create创建的Flowable,需要下游指定背压策略
        ERROR,      //放入Flowable异步缓存池的数据超限,将抛出MissingBackpressureException
        BUFFER,     //异步缓存池无大小限制,可无限添加数据,不会抛出异常,但会OOM
        DROP,       //如果Flowable异步缓存池满了,将抛弃将要添加的数据
        LATEST      //如果Flowable异步缓存池满了,将抛弃将要添加的数据,但强制添加最后一条数据
    }
private void Flowable() {
        Flowable.create(new FlowableOnSubscribe<Integer>() {
            @Override
            public void subscribe(FlowableEmitter<Integer> emitter) {
                for (int i = 0; i < 10; i++) {
                    emitter.onNext(i);
                }
                emitter.onComplete();
            }
        },BackpressureStrategy.BUFFER)
        .subscribeOn(Schedulers.newThread())
        .observeOn(AndroidSchedulers.mainThread())
        .subscribe(new Consumer<Integer>() {
            @Override
            public void accept(Integer integer) throws Exception {
                Log.d(TAG, "accept: " + integer);
            }
        });
    }

对应的操作符:onBackpressureBuffer(); onBackpressureDrop; onBackpressureLatest();

private void Flowable() {
        Flowable.interval(1000, TimeUnit.MILLISECONDS)
                .onBackpressureBuffer()
        .subscribeOn(Schedulers.newThread())
        .observeOn(AndroidSchedulers.mainThread())
        .subscribe(new Consumer<Long>() {
            @Override
            public void accept(Long aLong) throws Exception {
                Log.d(TAG, "accept: "+aLong);
            }
        });
    }

4.Flowable所支持的创建操作符,用法同Observable创建操作符

 private void Flowable() {
        Flowable.amb();
        Flowable.ambArray();
        Flowable.create();
        Flowable.combineLatest();
        Flowable.combineLatestDelayError();
        Flowable.concat();
        Flowable.concatDelayError();
        Flowable.concatArray();
        Flowable.concatArrayDelayError();
        Flowable.defer();
        Flowable.fromArray();
        Flowable.fromIterable();
        Flowable.fromFuture();
        Flowable.fromCallable();
        Flowable.fromPublisher();
        Flowable.generate();
        Flowable.interval();
        Flowable.intervalRange();
        Flowable.just();
        Flowable.merge();
        Flowable.mergeDelayError();
        Flowable.mergeArray();
        Flowable.mergeArrayDelayError();
        Flowable.never();
        Flowable.range();
        Flowable.rangeLong();
        Flowable.sequenceEqual();
        Flowable.switchOnNext();
        Flowable.switchOnNextDelayError();
        Flowable.timer();
        Flowable.using();
        Flowable.zip();
        Flowable.zipArray();
        Flowable.zipIterable();
    }

5.操作符用法同Observable变换操作符

Flowable.interval(500,TimeUnit.MILLISECONDS)
        .onBackpressureBuffer()
        .subscribeOn(Schedulers.newThread())
        .observeOn(AndroidSchedulers.mainThread())
        .map(new Function<Long, Long>() {
            @Override
            public Long apply(Long aLong) {
                return aLong + 1;
            }
        });

猜你喜欢

转载自blog.csdn.net/qq_39507260/article/details/84780970
今日推荐