gpt4 book ai didi

java - Rxjava中如何在一个线程中处理Observable的所有事件,但在另一个线程中获取可用的最新值?

转载 作者:行者123 更新时间:2023-12-01 20:19:36 26 4
gpt4 key购买 nike

我在 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com