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