RxJava2 CompositeDisposable可以自行清理已处置的订阅吗?

问题描述 投票:0回答:1

[我有时会为网络请求触发应用程序的Single,如果需要取消所有未决的网络请求,我会将其添加到CompositeDisposable

CompositeDisposable会将Disposable添加到内部HashSet,所以随着时间的推移,我添加的Single越多,CompositeDisposable将占用的内存就越多。

CompositeDisposable是否有任何方法可以进行“清理”,将其disposed Disposabled从其内部的HashSet中删除以节省内存?

rx-java2
1个回答
0
投票

我有同样的问题。

我不确定这是否是最好的方法,但是我是以这种方式实现的:

package io.reactivex.disposables

import io.reactivex.internal.util.OpenHashSet

fun CompositeDisposable.clearDisposed() {
    if (disposed) {
        return
    }
    var notDisposedSet: OpenHashSet<Disposable>
    synchronized(this) {
        if (disposed) {
            return
        }
        notDisposedSet = OpenHashSet()
        for (res in resources?.keys().orEmpty()) {
            if (res is Disposable && !res.isDisposed) {
                notDisposedSet.add(res)
            }
        }
        resources = notDisposedSet
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.