我在Android中使用RxJava2,但遇到以下问题,但它并非特定于Android。

我有一个PublishSubject来推送我的所有事件。我根据不同的事件在代码的多个部分中调用publishSubject.onNext()。但是我在代码中占据了中心位置,可以订阅这些事件。以下是订阅代码:

publishSubject
    .observeOn(Schedulers.computation())
    .map(
        // each computation takes about 10ms
        // Do some computation and return a `computation` object
    )
    .observerOn(AndroidSchedulers.mainThread())
    .subscribe(
        // take the `computation` object and draw on screen
        // each drawing takes about 100ms
    );


现在,在上述情况下,如果我呼叫publishSubject.onNext() 100次,那么computation将执行100次,而在屏幕上绘制将进行100次。

我关心的是100倍的计算。每个事件都必须计算。但是,并非每个计算对象都需要绘制。

当在屏幕上绘制第一个computation对象时,需要花费100ms的时间在MAIN线程中绘制,但是到那时,在COMPUTATION线程中将生成10个新的computation对象。因此,我第二次在屏幕上绘制时,我不想绘制第二个computation对象,而是想要获得最新的computation对象(可能是第11个计算对象)。

简而言之,我正在寻找一种可以一直进行所有计算的方法,但是只能在屏幕上绘制当时可用的最新计算对象。

最佳答案

你尝试过这样的事情吗?

publishSubject
.observeOn(Schedulers.computation())
.map(...)
.toFlowable(BackpressureStrategy.LATEST)
.observerOn(AndroidSchedulers.mainThread())
.subscribe(...);


这将确保计算确实发生,但是订阅将不会接收到时间上太远的项目。

09-26 08:28