Rx java Rx Observable share()与skip()使用问题

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())

我有一个代码,其中使用了共享的可观察对象。其中一个共享实例使用了额外的skip和debounce操作符。问题是,有时不调用使用skip和debounce的实例的操作

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()));