[我有时会为网络请求触发应用程序的Single
,如果需要取消所有未决的网络请求,我会将其添加到CompositeDisposable
。
CompositeDisposable
会将Disposable
添加到内部HashSet
,所以随着时间的推移,我添加的Single
越多,CompositeDisposable
将占用的内存就越多。
CompositeDisposable
是否有任何方法可以进行“清理”,将其disposed
Disposabled
从其内部的HashSet
中删除以节省内存?
我有同样的问题。
我不确定这是否是最好的方法,但是我是以这种方式实现的:
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
}
}