我是RxJava和LeakCanary的新手,所以这可能很简单(希望如此)。
基本上我有一个包含CompositeDisposable
的活动。我获取了Singleton存储库的实例,并使用它来获取添加到Completable
的{{1}}。
在onPause中我清除CompositeDisposable
,我认为这将避免调用对象的任何内存泄漏(在本例中为Activity)。
不幸的是,在安装LeakCanary之后,它报告此活动是通过CompositeDisposable
泄漏到存储库中的。
我做错了什么?谷歌搜索时,我没有看到人们正在做的任何额外的事情。
注意:
通常情况下,我通过Completable
从我的存储库中获得一个observable,但在这种情况下,我使用我的Settings Activity,它需要对存储库进行一次调用。它不需要ViewModel。
无论如何,因为这个LeakCanary能够注意到Activity被泄露了。如果我没有在默认情况下弄错,除非我告诉它,否则我无法在我的ViewModel上执行此操作。
所以也许其他一切都被泄露了,但我还没有意识到这一点。好吧,我刚刚观看了我的一个AndroidViewModel,确定它也被泄露了(根据LeakCanary)。似乎要么我做错了,要么LeakCanary出现了误报。
任何帮助表示赞赏。 感谢。
所要求的代码(已更新):
AndroidViewModel
LeakCanary屏幕截图:
答案 0 :(得分:0)
好的,正如评论中提到的,我通过从存储库中删除CompositeDisposable来解决此错误。 RxJava新手我还不知道如何正确使用它。我在订阅中订阅了订阅,而不是链接和返回一个observable,并在链的末尾订阅一次。即我的存储库实际上并不需要订阅任何东西,只需要修改一些逻辑或做一些"然后"。