Android RxJava-如何停止(和恢复)热可观察(间隔)?
我可以观察到以下热点:Android RxJava-如何停止(和恢复)热可观察(间隔)?,android,rx-java,reactive-programming,stoppropagation,rx-java2,Android,Rx Java,Reactive Programming,Stoppropagation,Rx Java2,我可以观察到以下热点: hotObservable = Observable.interval(0L, 1L, TimeUnit.SECONDS) .map((t) -> getCurrentTimeInMillis())) 然而,我找不到一个好办法来阻止它。我使用takeWhile和boolean标志(runTimer)部分解决了这个问题: 但是,在这种方法中有两件事我不喜欢: 我必须保留标志runTimer,这是我不想要的 一旦ru
hotObservable = Observable.interval(0L, 1L, TimeUnit.SECONDS)
.map((t) -> getCurrentTimeInMillis()))
然而,我找不到一个好办法来阻止它。我使用takeWhile
和boolean
标志(runTimer
)部分解决了这个问题:
但是,在这种方法中有两件事我不喜欢:
runTimer
,这是我不想要的runTimer
变为false
,可观察对象就完成了,这意味着如果我想再次发射,我需要创建一个新的可观察对象。我不想那样。我只想让可观察到的东西停止发射,直到我告诉它重新开始hotObservable.stop();
hotObservable.resume();
这样,我就不需要保留任何标记,可观察对象总是活动的(尽管它可能不会发出事件)
如何实现这一点?一种可能的方法是使用行为主体和开关映射:
BehaviorSubject<Boolean> subject = BehaviorSubject.create(true);
hotObservable = subject.distinctUntilChanged().switchMap((on) -> {
if (on) {
return Observable.interval(0L, 1L, TimeUnit.SECONDS);
} else {
return Observable.never();
}
}).map((t) -> getCurrentTimeInMillis());
BehaviorSubject subject=BehaviorSubject.create(true);
hotObservable=subject.distinctUntilChanged().switchMap((打开)->{
如果(打开){
返回可观察间隔(0L、1L、时间单位秒);
}否则{
返回可观察。从不();
}
}).map((t)->getCurrentTimeInMillis());
通过向对象发送布尔值,可以控制可观察对象的输出subject.onNext(true)
将导致使用该主题创建的任何可观察对象开始发出值subject.onNext(false)
禁用该流
switchMap
在关闭时负责处理底层的可观察对象。它还使用distinctUntilChanged
来确保它不会进行不必要的切换。Mybe您可以使用它
Observable.interval(3, TimeUnit.SECONDS)
.takeUntil(stop)
.subscribe(new MyObserver());
Thread.sleep(10000);
stop.onNext(-1);
可观察到的物品应该停止生产,还是继续运行但停止排放?@npace停止生产将是理想的,但我也很乐意只停止排放。这两种方法都适用于我的情况Kiskae的回答完全正确但仅供参考。。如果将上一个解决方案中的
takeWhile
运算符替换为filter
运算符,则可以消除第二个缺点。。。
Observable.interval(3, TimeUnit.SECONDS)
.takeUntil(stop)
.subscribe(new MyObserver());
Thread.sleep(10000);
stop.onNext(-1);