我在 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 次,那么 计算
将完成 100 次,并且在屏幕上绘制将完成 100 次次。
问题是我关心 100 次计算。每个事件都必须被计算。但并不是每个计算对象都需要绘制。
当第一个 computation
对象在屏幕上绘制时,在 MAIN 线程中绘制需要 100 毫秒,但此时在 COMPUTATION 线程中会生成 10 个新的 computation
对象。因此,我第二次在屏幕上绘制时,我不想绘制第二个计算对象,而是绘制可供我使用的最新计算对象(可能是第 11 个计算对象) )。
简而言之,我正在寻找一种始终进行所有计算的方法,但仅在屏幕上绘制当时可用的最新计算对象。
最佳答案
你尝试过这样的事情吗?
publishSubject
.observeOn(Schedulers.computation())
.map(...)
.toFlowable(BackpressureStrategy.LATEST)
.observerOn(AndroidSchedulers.mainThread())
.subscribe(...);
这将确保计算实际发生,但订阅不会收到时间太早的项目。
关于java - Rxjava中如何在一个线程中处理Observable的所有事件,但在另一个线程中获取可用的最新值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45115366/