DisposableCompletableObserver 泄漏 Activity 即使我正在清除 CompositeDisposable

DisposableCompletableObserver leaking Activity even though I'm clearing CompositeDisposable

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

基本上我有一个 Activity,其中包括一个 CompositeDisposable。我获取了我的 Singleton 存储库的实例,并使用它来获取添加到 CompositeDisposable.

Completable

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

不幸的是,在安装 LeakCanary 后,它报告此 Activity 通过 Completable.

在存储库中泄漏

我做错了什么?谷歌搜索时,我没有看到人们在做什么。


:

通常我会通过 AndroidViewModel 从我的存储库中获取一个可观察对象,但是在这种情况下,我使用的是我的设置 Activity,它需要对存储库进行一次调用。它不需要 ViewModel。

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

所以也许其他一切都被泄露了,但我只是不知道而已。好吧,我刚看了我的一个 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 截图:

好的,正如评论中提到的,我通过从存储库中删除 CompositeDisposable 解决了这个错误。 RxJava 的新手我不知道如何正确使用它。我在订阅中有订阅,而不是链接并返回一个可观察对象,并在链的末尾订阅一次。 IE。我的存储库实际上不需要订阅任何东西,它只需要添加一些逻辑或做一些 "andThen's".