我是Rx Android新手。我看到像油门和油门这样的操作员去抖;但是我无法弄清楚如何在我的场景中有效地使用它。
在我的APP中,来自几个执行线程更新了一些全局状态,并请求执行代价高昂的计算。 计算需要在不同的线程上执行。调用者线程使用Observable接收计算结果。
可以有几个连续或并行调用来执行计算。我想去掉一定时间内的呼叫,所有呼叫者都应该收到最后一次计算的值。
对于前。如果三个线程T1,T2& T3请求在500ms的时间段内执行计算,然后计算仅需执行一次。所有线程T1,T2& T3观察计算结果(Observer)得到最后的计算结果。
答案 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))