[RxJava订阅添加到CompositeDisposable之后不起作用

问题描述 投票:1回答:1

我正在使用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.

没有应用块,它按预期工作。

这是预期的行为吗?为什么在尚未弃用复合一次性物料时立即撤消订阅?

rx-java2
1个回答
0
投票

如果调用了disposed(),您将无法再执行add(),因为它将立即丢弃。

有两个选项可以解决此问题:

  1. 实例化new CompositeDisposable()并开始添加处置对象。完成后,请致电dispose()。如果要添加更多内容,请再次实例化CompositeDispose
  2. 仅实例化一个new CompositeDisposable(),但使用dispose()代替clear()。执行此命令后,您将能够继续添加一次性用品,而无需新的CompositeDispose
© www.soinside.com 2019 - 2024. All rights reserved.