我正在使用RxJava Flowable with Room
来监听表中的更改。提到的问题是when the result of subscribe, a disposable, is added to a CompositeDisposable, it immediately unsubscribes
。
下面是相关代码:
repo.getFlowable(id)
?.doOnDispose { Timber.i("Unsubscribed") }
?.doOnDispose { Timber.i("Disposed") }
?.subscribe({
Timber.i("Subscribed")
}, {
Timber.e(it)
})?.apply {
compositeDisposables.add(this)
}
添加应用块后,将立即打印“ Unsubscribed”和“ disposed” even though "compositeDisposables.dispose()" is not called.
没有应用块,它按预期工作。
这是预期的行为吗?为什么在尚未弃用复合一次性物料时立即撤消订阅?
如果调用了disposed()
,您将无法再执行add()
,因为它将立即丢弃。
有两个选项可以解决此问题:
new CompositeDisposable()
并开始添加处置对象。完成后,请致电dispose()
。如果要添加更多内容,请再次实例化CompositeDispose
。new CompositeDisposable()
,但使用dispose()
代替clear()
。执行此命令后,您将能够继续添加一次性用品,而无需新的CompositeDispose