【发布时间】:2018-03-21 04:25:31
【问题描述】:
我是一名 Android 学生。我想学习 RxJava。我的问题是“RxJava 中的 CompositeDisposable 是什么?”。请详细描述。
【问题讨论】:
我是一名 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())
然后你可以进行一次 dispose 调用:
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 的方法来处理该请求。
【讨论】:
Observable 或Single 之后,我可以像composite.dispose() 这样在一个电话中处理所有订阅?
CompositeDisposable 只是一个类,用于将所有一次性物品保存在同一个地方,以便您可以一次性处理所有物品。喜欢:
Disposable disposable1;
Disposable disposable2;
Disposable disposable3;
CompositeDisposable composite = new CompositeDisposable();
composite.addAll(disposable1, disposable2, disposable3)
composite.dispose()
所有这些都被处理掉了
【讨论】:
compositeDisposable 包含一次性用品列表,而SerialDisposable 是一次性用品,可以用新的一次性用品更换或更新。有关差异的更多详细信息在这里:rb.gy/9vir4y
CompositeDisposable 是一个方便的类,用于捆绑多个Disposables,以便您可以通过CompositeDisposable 上的一个方法调用来处理它们。
您可以使用CompositeDisposable#add 将一次性用品添加到CompositeDisposable
您无需分别对每个Disposable 调用dispose(),而是调用CompositeDisposable#clear() 来处理所有已添加的Disposables。如果您想处置所有当前的Disposables 并自动处置将来添加的任何Disposables,请致电CompositeDisposable#dispose()。这是有道理的,当您在其上调用 dispose() 时,您实际上是在处置 CompositeDisposable,因此您添加的任何 Disposables 都会被处置。
【讨论】:
添加到上面的 CompositeDisposable 提供了 O(n) 的一致时间空间复杂度,而不管添加和删除多个一次性用品,当活动或片段被破坏时也会被清除。
【讨论】: