代码之家  ›  专栏  ›  技术社区  ›  Michael Vescovo

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

  •  1
  • Michael Vescovo  · 技术社区  · 7 年前

    我对RxJava和LeakCanary还不熟悉,所以这可能很简单(希望如此)。

    CompositeDisposable . 我得到了我的单例存储库的实例,并使用它来获得一个 Completable 复合可分解 .

    复合可分解

    不幸的是,在安装LeakCanary后,它报告此活动在存储库中通过 可完成的 .

    我做错了什么?在谷歌上搜索时,我看不到人们在做什么额外的事情。


    笔记

    通常,我通过一个 AndroidViewModel 然而,在本例中,我使用的是我的设置活动,它需要对存储库进行一次调用。它不需要ViewModel。

    无论如何,因为这个漏洞,金丝雀能够注意到活动被泄露了。如果我在默认情况下没有弄错的话,它将无法在我的ViewModels上执行此操作,除非我告诉它。


    按要求编码( 已更新

    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屏幕截图:

    enter image description here

    1 回复  |  直到 7 年前
        1
  •  1
  •   Michael Vescovo    7 年前