我是否需要处置()使用LiveDataReactiveStreams创建的发布者

时间:2017-12-19 10:01:56

标签: android memory-leaks rx-java2 android-architecture-components android-livedata

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

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

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

现在,我不想直接观察LiveData,而是想把它转换回带有LiveDataReactiveStreams.toPublisherFlowable.fromPublisher的Flowable,而是订阅Flowable。现在这是一个Flowable,它包装了一个包装Flowable

的LiveData

我的问题是:我是否要担心处理此Flowable的订阅?我希望LiveData可以作为一个“障碍”,防止我的上下文泄漏回根Flowable,但我不太确定。

换句话说:

  1. Flowable A 存在于全局背景中
  2. 在每个片段中, A 包装在LiveData B 中,该片段被设置为片段属性ViewModel
  3. 通常情况下,我会观察LiveData B ,而是将其换成Flowable C
  4. 我订阅了Flowable C 并忽略了返回的一次性
  5. 当片段被销毁时, C 中访问的视图会泄漏到 A 吗?

1 个答案:

答案 0 :(得分:2)

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

mLiveData.observe(mLifecycle, LiveDataSubscription.this);

只有在请求非正数量的项目并发送错误时,才会自动取消观察。然后处理订阅。由于制作人永远不会完成它,所以永远不会自己处理订阅,因此如果您不自行处理订阅,您将会泄漏订阅。