我是否需要处理使用 LiveDataReactiveStreams 创建的发布者

Do I need to dispose() Publishers created using LiveDataReactiveStreams

假设我有一个在应用程序的不同部分之间共享的 Flowable。

在我想要观察的每个片段中,我将其转换为具有 LiveDataReactiveStreams.fromPublisher 的 LiveData 以避免泄漏和崩溃。我现在有一个包裹我的 Flowable 的 LiveData。

然后我将 LiveData 传递到我的 ViewModel(在 ViewModelFactory 中)。据我了解,我可以继续使用 LiveData 而不必担心泄漏。

现在,我没有直接观察 LiveData,而是想通过 LiveDataReactiveStreams.toPublisherFlowable.fromPublisher 将其转换回 Flowable 并改为订阅 Flowable。现在这是一个 Flowable,它包裹着一个 LiveData,它包裹着一个 Flowable

我的问题是:我是否需要担心处理这个 Flowable 的订阅?我希望 LiveData 将充当 "barrier",防止我的上下文泄漏回根 Flowable,但我对此不太确定。

换句话说:

  1. Flowable A 存在于全局上下文中
  2. 在每个片段中,A 被包裹在 LiveData B 中,它被设置为片段 ViewModel[ 的 属性 =41=]
  3. 当我通常观察 LiveData B 时,我将其包装在 Flowable C
  4. 我订阅了 Flowable C 并忽略了返回的 disposable

当片段被销毁时,在 C 中访问的视图是否会泄漏到 A

考虑到 current implementation,您仍然需要手动处理订阅。生命周期仅用于处理实时数据的观察。

mLiveData.observe(mLifecycle, LiveDataSubscription.this);

仅当请求的项目数量为非正值并发送错误时,才会自动取消观察。然后处理订阅。由于生产者永远不会完成,它永远不会自行处理订阅,因此如果您不自己处理订阅,就会泄露订阅。