即使我正在清除CompositeDisposable,DisposableCompletableObserver也会泄漏活动

时间:2017-09-25 03:11:28

标签: android rx-java2 leakcanary

我是RxJava和LeakCanary的新手,所以这可能很简单(希望如此)。

基本上我有一个包含CompositeDisposable的活动。我获取了Singleton存储库的实例,并使用它来获取添加到Completable的{​​{1}}。

在onPause中我清除CompositeDisposable,我认为这将避免调用对象的任何内存泄漏(在本例中为Activity)。

不幸的是,在安装LeakCanary之后,它报告此活动是通过CompositeDisposable泄漏到存储库中的。

我做错了什么?谷歌搜索时,我没有看到人们正在做的任何额外的事情。

注意

通常情况下,我通过Completable从我的存储库中获得一个observable,但在这种情况下,我使用我的Settings Activity,它需要对存储库进行一次调用。它不需要ViewModel。

无论如何,因为这个LeakCanary能够注意到Activity被泄露了。如果我没有在默认情况下弄错,除非我告诉它,否则我无法在我的ViewModel上执行此操作。

所以也许其他一切都被泄露了,但我还没有意识到这一点。好吧,我刚刚观看了我的一个AndroidViewModel,确定它也被泄露了(根据LeakCanary)。似乎要么我做错了,要么LeakCanary出现了误报。

任何帮助表示赞赏。 感谢。

所要求的代码(已更新):

AndroidViewModel

LeakCanary屏幕截图:

enter image description here

1 个答案:

答案 0 :(得分:0)

好的,正如评论中提到的,我通过从存储库中删除CompositeDisposable来解决此错误。 RxJava新手我还不知道如何正确使用它。我在订阅中订阅了订阅,而不是链接和返回一个observable,并在链的末尾订阅一次。即我的存储库实际上并不需要订阅任何东西,只需要修改一些逻辑或做一些"然后"。