【问题标题】:CompositeDisposable.clear() does not stop Observable executionCompositeDisposable.clear() 不会停止 Observable 的执行
【发布时间】:2020-08-05 14:36:02
【问题描述】:

我使用 CompositeDisposable 来观察网络调用。 可观察对象位于使用我的活动上下文的类中,因此即使在 onDestroy() 中调用 clear() 之后,可观察对象仍会继续运行,并且其类包含对我的活动的引用,从而导致内存泄漏。 有什么方法可以真正停止这个过程,而不是停止观察它?

具有 Observable 的类

    public ProgressObservable(Context context) {
        super(context);
        createProgressObservable();
    }

    private void createProgressObservable() {
        progressObservable = authenticationObservable
                .flatMap((Function<Object, Observable<ProgressResponse>>)
                        Response -> Observable.fromCallable(() -> {
                            ...
                            ...
                            return pResponse;
                        })).cache();
    }

在我的Activity中创建observable

        Observable<ProgressResponse> prObservable = new ProgressObservable(context).getProgressObservable();
        disposable.add(prObservable
                .subscribe(progress -> mListener.onSilentRefreshComplete(),
                        error -> {
                        }));

    @Override
    public void onDestroy() {
        super.onDestroy();
        if (isFinishing()) {
            disposables.clear();
        }
    }

【问题讨论】:

  • 你试过用“dispose”代替“clear”吗?
  • @SaeedLotfi 没有区别。

标签: android rx-java2


【解决方案1】:

来自 reddit 的 u/bleeding182 的道具,他指出了问题,这是使用 .cache()。 来自文档

  • 当您使用 {@code cache} Observer 时,您牺牲了处理源的能力,因此请注意不要在 ObservableSources 上使用此 Observer,因为该 ObservableSources 发出无限或非常大量的项目,会耗尽内存。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多