我是一名Android学员。我想学习RxJava。我的问题是" RxJava中的CompositeDisposable是什么?"。请详细说明。
答案 0 :(得分:21)
复合一次性处理(想想早点更容易取消)。假设您的活动同时发生多个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,您可以使用运算符重载来使其看起来更好:
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的方法来处理请求。
答案 1 :(得分:4)
CompositeDisposable只是一个将所有一次性物品保存在同一个地方的类,您可以立即处置所有的一次性物品。像:
Disposable disposable1;
Disposable disposable2;
Disposable disposable3;
CompositeDisposable composite = new CompositeDisposable();
composite.addAll(disposable1, disposable2, disposable3)
composite.dispose()
所有这些都被处理
答案 2 :(得分:3)
CompositeDisposable
是用于捆绑多个Disposable
的便捷类,因此您可以通过在CompositeDisposable
上进行一次方法调用来处置它们。
您可以使用CompositeDisposable
将一次性用品添加到CompositeDisposable#add
您可以调用dispose()
来处置已添加的所有Disposable
,而不是分别在每个CompositeDisposable#clear()
上调用Disposable
。如果要处置所有当前Disposable
,请并且自动处置将来添加的所有Disposable
,请致电CompositeDisposable#dispose()
。从某种意义上讲,当您在调用CompositeDisposable
时实际上是在处置dispose()
,因此,您添加的所有Disposable
都将被处置。
答案 3 :(得分:0)
添加到上述CompositeDisposable中可提供一致的O(n)时空复杂度,而与添加或移除多个一次性用品无关,当销毁活动或碎片时也可以清除。