2016-12-02 2 views
0

Учитывая это:OnCompleted не вызывается при использовании ConnectableObservable и

TestSubscriber subscriber = new TestSubscriber(); 

ConnectableObservable<Integer> observable = Observable.just(1,2,3,4,5).publish(); 

observable.startWith(observable).subscribe(subscriber); 

observable.connect(); 

Абонент получает 1,2,3,4,5 в onNext, но не получает OnCompleted.

Если изменить код на:

Observable.just(1,2,3,4,5).replay() 

то абонент получает 1,2,3,4,5,1,2,3,4,5 в onNext, а затем OnCompleted, а также которые это то, что я ожидаю.

Для меня это должно вести себя одинаково в обоих сценариях, поскольку все подписки происходят до вызова .connect() в первом примере.

Может кто-то прояснить, почему первый сценарий ведет себя по-другому?

+1

В данном конкретном случае, 'публиковать()' отсоединяется после первого раунда, и вы ждете вас, чтобы соединиться снова для второго. – akarnokd

ответ

1

Я думаю, что ваша проблема связана с этим - observable.startWith(observable). Он говорит, что наблюдаемые испускают все свои предметы, прежде чем он начнет испускать все свои предметы.

Попробуйте удалить эту часть -

TestSubscriber subscriber = new TestSubscriber(); 

ConnectableObservable<Integer> observable = Observable.just(1,2,3,4,5).publish(); 
observable.subscribe(subscriber); 
observable.connect();