我是一名Android学生,想要学习RxJava。我的问题是“RxJava中的CompositeDisposable是什么?”请详细描述。
组合式一次性使用的产品使得丢弃(也就是提前取消)更加容易。比如你有一个活动需要同时发出多个API调用:
var disposable = api.call1(arg1, arg2).subscribe(...)
var disposable2 = api.call2(arg1).subscribe(...)
var disposable3 = api.call3().subscribe()
如果你需要提前处理(例如用户导航离开活动),则需要执行以下操作:disposable.dispose()
disposable2.dispose()
disposable3.dispose()
如果您使用CompositeDisposable,可以将所有的可处理对象存储在其中。如下所示:
val composite = CompositeDisposable()
composite.add(api.call1(arg1, arg2).subscribe(...))
composite.add(api.call2(arg1).subscribe(...))
composite.add(api.call3().subscribe())
然后你可以只进行一次处理调用:
composite.dispose()
如果您正在使用Kotlin,您可以使用运算符重载使其更加美观:
operator fun CompositeDisposable.plusAssign(disposable: Disposable) {
this.add(disposable)
}
这使您能够将其表达为:
val composite = CompositeDisposable()
composite += api.call1(arg1, arg2).subscribe(...)
composite += api.call2(arg1).subscribe(...)
composite += api.call3().subscribe()
Disposable表示一个请求(比如正在进行的工作),并且还有一个名为dispose的方法用于处理该请求。
CompositeDisposable 就是一个类,用于将所有可回收资源放在同一个位置,这样你就可以一次性将它们全部 dispose 掉。例如:
Disposable disposable1;
Disposable disposable2;
Disposable disposable3;
CompositeDisposable composite = new CompositeDisposable();
composite.addAll(disposable1, disposable2, disposable3)
composite.dispose()
它们都被处理了。
compositeDisposable
包含一系列的可处理对象,而 SerialDisposable
是一个可替换或更新为新的可处理对象的单个可处理对象。有关差异的更多详细信息,请参见此处:https://rb.gy/9vir4y - AI ICompositeDisposable
是一个方便的类,用于捆绑多个Disposable
,因此您可以通过在CompositeDisposable
上调用一个方法来全部处理它们。
您可以使用CompositeDisposable#add
向CompositeDisposable
中添加可处理对象。
不需要逐个调用dispose()
,只需调用CompositeDisposable#clear()
即可处理已添加的所有对象。如果您要处理所有当前的Disposable
并自动处理将来添加的任何Disposable
,请调用CompositeDisposable#dispose()
。这是有道理的,当您对其调用dispose()
时,您实际上正在处理CompositeDisposable
,因此添加的任何Disposable
都将被处理。
除了上述内容,CompositeDisposable 还提供了一致的时间空间复杂度 O(n),无论添加和删除多个可处理对象,当活动或片段被销毁时也会被清除。
Observable
或Single
后,只需一次调用composite.dispose()
来处理所有订阅? - Bitwise DEVS