Rx java Rx Observable share()与skip()使用问题
我有一个代码,其中使用了共享的可观察对象。其中一个共享实例使用了额外的skip和debounce操作符。问题是,有时不调用使用skip和debounce的实例的操作Rx java Rx Observable share()与skip()使用问题,rx-java,Rx Java,我有一个代码,其中使用了共享的可观察对象。其中一个共享实例使用了额外的skip和debounce操作符。问题是,有时不调用使用skip和debounce的实例的操作 Observable<Integer> beginChanged = RxBindingUtils .valueChanged(begin) .doOnEach(value -> Timber.d("Begin value changed: " + value.getValue())
Observable<Integer> beginChanged = RxBindingUtils
.valueChanged(begin)
.doOnEach(value -> Timber.d("Begin value changed: " + value.getValue()))
.share();
monitor(
beginChanged
.map(minutes -> minutesToTime(minutes))
.subscribe(beginTime.asAction()));
monitor(
beginChanged
.map(minutes -> minutes / interval)
.subscribe(rangeBegin.asAction()));
monitor(
beginChanged
.skip(1)// skip initial value emitted automatically right after the
// subsription
.debounce(500, TimeUnit.MILLISECONDS)// such as range bar may change the
// value very quickly use the
// debounce function for the timeout
// based processing
.doOnEach(value -> Timber.d("Begin value changed 2: " + value.getValue()))
.subscribe(mSchedulerRangeBegin.asAction()));
是否有任何限制不允许在共享观测值上使用跳过和去盎司?以下是从 好吧,我知道怎么了。“开始”将在上发射其当前值 由共享()的第一个订阅方触发的订阅,以及 由于所有这些都是同步的,因此后续订阅服务器不会获得 因为他们还没有被订阅。当 第一个事件到达时,将跳过它,然后只调用第二个事件 处理。如果将share替换为replay().refCount(),则测试 通行证
在我的例子中,通过将
share()
替换为publish()
解决了这个问题,在所有订阅者都订阅了connect()
呼叫之后。你能澄清一下你看到的和你期望的是什么行为吗?@AdamS在rx开发者的帮助下,我解决了这个问题。共享已被发布连接序列替换,如果您也可以在此处发布答案,这将有助于下一个遇到此问题的人:)@亚当斯,好的,做了
monitor(
RxBindingUtils
.valueChanged(begin) // can't use shared observable because of unexpected behaviour with skip call
.skip(1)// skip initial value emitted automatically right after the
// subsription
.debounce(500, TimeUnit.MILLISECONDS)// such as range bar may change the
// value very quickly use the
// debounce function for the timeout
// based processing
.doOnEach(value -> Timber.d("Begin value changed 2: " + value.getValue()))
.subscribe(mSchedulerRangeBegin.asAction()));