Rx Android:对计算和 return 最后计算值的去抖动调用

Rx Android: Debounce calls to compute and return last computed value

我是 Rx 新手 Android。我看到运营商喜欢油门和去抖;但是我无法弄清楚如何在我的场景中有效地使用它。

在我的应用程序中,多个执行线程更新了一些全局状态并请求执行昂贵的计算。 计算需要在不同的线程上执行。调用者线程使用 Observable 接收计算结果。

可以有多个连续或并行的调用来执行计算。我想将调用去抖动到一定的持续时间,所有调用者都应该收到最后一个计算值。

例如。如果三个线程T1、T2、T3请求在500ms的时间内执行一次计算,那么只需要执行一次计算。所有观察计算结果(Observer)的线程T1、T2、T3都得到最后的计算结果。

是这样的吗?

BehaviorSubject<Object> b = new BehaviorSubject();
Observable<T> computationChain = 
      b
      .onSubscribe(() -> b.onNext(null))
      .debounce(500, TimeUnit.MILLISECONDS)
      .observeOn(Schedulers.computation())
      .map(dummy -> performExpensiveComputation())
      .share();

....

public Observable<T> getComputation() {
    return computationChain;
}

....

getComputationChain().subscribe(value -> doSomething(value));

编辑:也许这会更好:

BehaviorSubject<Object> b = new BehaviorSubject();
Observable<T> computationChain = 
      b
      .debounce(500, TimeUnit.MILLISECONDS)
      .observeOn(Schedulers.computation())
      .map(dummy -> performExpensiveComputation())
      .publish();
      .onSubscribe(() -> b.onNext(null))