RXJava - hot observables - 安全的cpu资源

时间:2017-01-26 14:16:30

标签: rx-java

这是一个简单的可观察的例子:

observable
            .filter(...)
            .buffer(50, TimeUnit.MILLISECONDS)
            .doOnNext(/* this is executed all the time... */)
            .filter(data -> data.size() > 0)
            .doOnNext(/* this is not executed because of the filter above... */)
            .flatMap(data -> Observable.from(data).distinctUntilChanged())
            .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe();

问题/疑问

我从buffer(...)函数得到的可观察结果是在结果之后发出结果,大多是空结果。

使用这样的observable过滤正确的方法来处理这个问题吗?会不会有很多这样的订阅同时性价比?或者应该采用不同的方式处理?

1 个答案:

答案 0 :(得分:1)

通常,是的,过滤掉下游不需要的东西。

  

同时会有很多此类订阅的性价比吗?

技术上:是的。更多的计时器,计算线程上更活跃的序列。但是,序列的开销可能远远小于您执行的业务逻辑。

为节省一些开销,我会使用flatMapIterable

observable
    .filter(...)
    .buffer(50, TimeUnit.MILLISECONDS)
    .doOnNext(/* this is executed all the time... */)
    .filter(data -> data.size() > 0)
    .doOnNext(/* this is not executed because of the filter above... */)
    .flatMapIterable(data -> data)               // <-----------------------------
    .distinctUntilChanged()
    .subscribeOn(Schedulers.io())
    .observeOn(AndroidSchedulers.mainThread())
    .subscribe();