什么是RxJava中的CompositeDisposable

时间:2017-10-09 21:31:24

标签: rx-java

我是一名Android学员。我想学习RxJava。我的问题是" RxJava中的CompositeDisposable是什么?"。请详细说明。

4 个答案:

答案 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)时空复杂度,而与添加或移除多个一次性用品无关,当销毁活动或碎片时也可以清除。