我是RxJava和LeakCanary的新手,因此这可能是简单的事情(希望)。DisposableCompletableObserver泄漏即使我正在清除CompositeDisposable
基本上我有一个活动,其中包括一个CompositeDisposable
。我得到了我的Singleton存储库的实例,并使用它来获取Completable
,并将其添加到CompositeDisposable
。
在onPause中,我清除了CompositeDisposable
,这让我相信会避免调用对象(在本例中为Activity)的任何内存泄漏。
不幸的是,在安装LeakCanary之后,它会通过Completable
报告此活动在存储库中泄漏。
我在做什么错?当用谷歌搜索时,我没有看到任何额外的人在做什么。
注意:
通常我从我的仓库可观察到的通过AndroidViewModel
,但是在这种情况下,我使用它有一个要求我设置的活动,使一个调用库。它不需要ViewModel。
无论如何,因为这个LeakCanary能够注意到活动被泄露。如果我没有错误的默认情况下,它将无法在我的ViewModels上做到这一点,除非我告诉它。
所以也许其他一切都被泄漏,但我只是没有意识到它。好吧,我只是看了我的一个AndroidViewModel,并确信它也被泄露(根据LeakCanary)。看来无论我做错了什么,或者LeakCanary都表现出误判。
任何帮助表示赞赏。 谢谢。根据要求
代码(更新):
private CompositeDisposable mSubscriptions;
@Override
public void onCreate(Bundle savedInstanceState) {
...
mSubscriptions = new CompositeDisposable();
...
}
@Override
protected void onPause() {
super.onPause();
mSubscriptions.clear();
}
public void someMethodForButtonClick(View view) {
IwcRepository iwcRepository =
Injection.provideIwcRepository(getApplication());
mSubscriptions.add(iwcRepository.getSomeCompletable()
.subscribeOn(Schedulers.computation())
.observeOn(AndroidSchedulers.mainThread())
.subscribeWith(new DisposableCompletableObserver() {
@Override
public void onComplete() {
}
@Override
public void onError(@NonNull Throwable e) {
}
}));
}
LeakCanary截图:
请提供一些代码。 – akarnokd
@akarnokd完成。 –
@akarnokd有什么想法? –