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 twoyougin
11/15/2019, 12:13 PMyougin
11/15/2019, 12:14 PMmyObservable
.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)
}bezrukov
11/15/2019, 12:37 PMHot dispose twice, but Cold dispose onceyougin
11/15/2019, 12:54 PM