Rx Android:Debounce调用计算并返回上次计算的值

时间:2016-08-05 17:40:35

标签: android multithreading rx-java rx-android

我是Rx Android新手。我看到像油门和油门这样的操作员去抖;但是我无法弄清楚如何在我的场景中有效地使用它。

在我的APP中,来自几个执行线程更新了一些全局状态,并请求执行代价高昂的计算。 计算需要在不同的线程上执行。调用者线程使用Observable接收计算结果。

可以有几个连续或并行调用来执行计算。我想去掉一定时间内的呼叫,所有呼叫者都应该收到最后一次计算的值。

对于前。如果三个线程T1,T2& T3请求在500ms的时间段内执行计算,然后计算仅需执行一次。所有线程T1,T2& T3观察计算结果(Observer)得到最后的计算结果。

1 个答案:

答案 0 :(得分:1)

这样的东西?

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))