Тема поведения с паузой?

Возможно ли иметь что-то вроде BehaviorSubject с переключателями паузы и возобновления? Что-то вроде PausableBehaviorSubject.pause() и PausableBehaviorSubject.resume()? Как это можно было сделать?

Идея состоит в том, что во время паузы субъект не будет пересылать события, полученные через PausableBehaviorSubject.onNext(), а вместо этого сохранит только последнее. При возобновлении (или при подписке, если она не приостановлена) PausableBehaviorSubject будет пересылать сохраненное последнее событие (если есть) и пересылать последующие события своим подписчикам.


person Eduardo Bezerra    schedule 30.05.2016    source источник
comment
примерно так: subject.filter(i -> !isPaused).replay(1).autoconnect()? (не испытано..)   -  person dwursteisen    schedule 31.05.2016
comment
нельзя просто сделать subscribe и unsubscribe вместо resume и pause?   -  person Samuel Gruetter    schedule 01.06.2016
comment
@SamuelGruetter проблема в том, что вы позволите наблюдателю контролировать, когда он получает обновления, а когда нет. С приостанавливаемым наблюдаемым это может быть инкапсулировано, и, таким образом, пауза/возобновление останется вне досягаемости наблюдателя.   -  person Eduardo Bezerra    schedule 01.06.2016
comment
То, что вы хотите, звучит как противодавление наблюдаемому. Вы можете ввести Subject, который применяет обратное давление в зависимости от своего состояния. Любые наблюдаемые выше по течению отвечают за буферизацию результатов до тех пор, пока противодавление не будет снято.   -  person Bob Dalgleish    schedule 12.07.2016


Ответы (1)


Есть оператор, который позволяет это сделать. Он называется pausableBuffered. Анимацию можно посмотреть по адресу: RxMarbles.

Ваш наблюдатель или субъект просто упакует исходную наблюдаемую, добавит новую логическую наблюдаемую и перевернет переключатель, предоставив значение true или false для вашей новой наблюдаемой.

person Bob Dalgleish    schedule 04.08.2016