Мне нужна общая наблюдаемая, чтобы выдавать новое значение .startWith()
каждый раз, когда подписывается общий поток (счетчик подписчиков идет от 0 до 1). К сожалению, значение, возвращаемое .startWith()
, повторно используется в течение всего времени существования общего наблюдаемого экземпляра, даже после того, как у этого общего потока нет подписчиков.
В идеале была бы перегрузка .startWith()
, которая принимает функцию в качестве параметра и повторно выполняет ее каждый раз, когда количество подписчиков изменяется с 0 на 1.
var count: Int = 0
@Before
fun setUp() {
count = 0 //reset
}
fun getTheCount(): Int {
count++
return count
}
@Test
fun startWithDefaultValue() {
val relay = PublishRelay.create<Int>()
val instance by lazy {
relay
.startWith(getTheCount())
.share()
}
val disposable1 = instance.subscribe {
println(it) //should print 1, and does!
}
disposable1.dispose() //subscriber count on shared instance drops from 1 to 0
//should print 2, but prints 1. getTheCount() is not called again on this subscription
val disposable2 = instance.subscribe {
println(it)
}
}