Replay(1) не работает внутри публикации
val subject = PublishSubject.create<UiModel>()
val pipeline = subject
.compose({
val models = it.ofType(UiModel.Model::class.java)
.replay(1)
.autoConnect()
val navigation = it.ofType(UiModel.Navigation::class.java)
Observable.merge(models, navigation)
})
теперь давайте подпишемся...
val disposable = pipeline.subscribe {
println("First subscriber: ${it.javaClass.simpleName}")
}
subject.onNext(UiModel.Model())
subject.onNext(UiModel.Model())
subject.onNext(UiModel.Navigation())
disposable.dispose()
val disposable1 = pipeline.subscribe { println("Second subscriber: ${it.javaClass.simpleName}") }
subject.onNext(UiModel.Navigation())
disposable1.dispose()
val disposable2 = pipeline.subscribe { println("Third subscriber: ${it.javaClass.simpleName}") }
disposable2.dispose()
Выход:
Первый подписчик: модель
Первый подписчик: модель
Первый подписчик: навигация
Второй подписчик: модель
Второй подписчик: навигация
Третий подписчик: Модель
Но если преобразователь внутри compose заменен на тот, который многоадресно передает выбросы восходящего потока, наблюдаемые с помощью команды publish:
val pipeline2 = subject
.compose({
it.publish {
val models = it.ofType(UiModel.Model::class.java)
.replay(1)
.autoConnect()
val navigation = it.ofType(UiModel.Navigation::class.java)
Observable.merge(models, navigation)
}
})
А теперь, если мы подпишемся точно так же...... как и выше...
Выход:
Первый подписчик: модель
Первый подписчик: модель
Первый подписчик: навигация
Второй подписчик: навигация
Первое поведение правильное, и я хотел бы воспроизвести последний объект Model только при отмене подписки и повторной подписке. По какой-то причине это не работает, когда используется публикация, ничего не воспроизводится. Я не понимаю почему. Пожалуйста помоги:)
Заранее благодарю за помощь.