yougin
11/15/2019, 11:07 AMObservable
, doOnUnsubscribe
is invoked upon unsubscribe (dispose) by each of them. Is there a way to wait until everyone unsubscribes?bezrukov
11/15/2019, 12:08 PMObservable
is cold, so in fact Subscribers
subscribe to different observables. So most likely you need to convert your cold observable to hot, for example by replay().refCount()
and then share it between subscribers. After that doOnUnsubscribe will be called only when every subscribe unsubscribesyougin
11/15/2019, 12:10 PMreplay().refCount()
but it doesn't seem to make any difference, i.e. doOnDispose
is invoked for every subscriberbezrukov
11/15/2019, 12:11 PMyougin
11/15/2019, 12:12 PMdoOnDispose
right before replay().refCount()
, trying to place it after these twomyObservable
.doOnSubscribe { init() }
.replay()
.refCount()
.doOnDispose { cleanUp() }
bezrukov
11/15/2019, 12:36 PMprivate val cold = Observable.interval(1, TimeUnit.SECONDS)
.subscribeOn(<http://Schedulers.io|Schedulers.io>())
.observeOn(<http://Schedulers.io|Schedulers.io>())
private val hot = cold.doOnDispose { println("Cold dispose") }
.replay().refCount()
.doOnDispose { println("Hot dispose") }
fun main() {
val first = hot
.subscribe {
println("1 $it")
}
val second = hot
.subscribe {
println("2 $it")
}
Thread.sleep(5000)
println("dispose first")
first.dispose()
Thread.sleep(5000)
println("dispose second")
second.dispose()
Thread.sleep(3000)
}
Hot dispose
twice, but Cold dispose
onceyougin
11/15/2019, 12:54 PM