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

标签 java android rx-java rx-android rx-java2

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

相关文章:

java - 寻找避免小程序重新加载的可能策略

java - 我可以在 Android 拔下电源并处于 hibernate 状态时唤醒它吗?

java - 尝试使用自定义适配器填充 ListView

android - RxJava 使用 onComplete 每 x 秒调用一次服务

android - 根据结果​​链接可观察对象

java - RxJava : chaining results from map methods

带有 JPanel 的 Java 滚动 JScrollPane 到底部

java - 附加到先前输出的 JSP 错误页面

java - 无法从 JUnit 中的 Spring Boot 读取应用程序属性?

android - 如何解决版本冲突的依赖问题?