我具有返回Flowable函数的接口
interface Iface{
Flowable<Int> get();
}
现在让我们假设具体的实现是:
class IFaceImpl{
int noOfSecs = 1;
Flowable<Int> get(){
return Flowable.interval(noOfSecs,TimeUnit.SECONDS)
}
}
我希望能够以这种方式更改noOfSecs
参数,即Flowable.interval将每2s而不是1s产生一次事件。当客户可以重新订阅时,这将很容易。就我而言,我无法做到这一点,我希望客户端仅订阅一次,但能够更改Flowable的发射频率以进行更改。
做这样的事情的最好方法是什么?
答案 0 :(得分:3)
使用switchMap
动态停止上一个间隔并开始一个新间隔。
class IfaceImpl {
final Subject<Long> nextInterval =
BehaviorSubject.createDefault(1)
.toSerialized();
Flowable<Long> get() {
return nextInterval.switchMap(seconds ->
Flowable.interval(seconds, TimeUnit.SECONDS)
);
}
void setNumberOfSeconds(int seconds) {
nextInterval.onNext(seconds);
}
}