Android RxJava中什么是可组合的

Android RxJava中什么是可组合的,android,rx-java,Android,Rx Java,我是一名安卓学生。我想学习RxJava。我的问题是“RxJava中什么是可组合的?”。请详细描述。CompositeDisposable只是一个将所有一次性物品放在同一位置的类,您可以一次性处理所有物品。比如: Disposable disposable1; Disposable disposable2; Disposable disposable3; CompositeDisposable composite = new CompositeDisposable(); composite.ad

我是一名安卓学生。我想学习RxJava。我的问题是“RxJava中什么是可组合的?”。请详细描述。

CompositeDisposable只是一个将所有一次性物品放在同一位置的类,您可以一次性处理所有物品。比如:

Disposable disposable1;
Disposable disposable2;
Disposable disposable3;

CompositeDisposable composite = new CompositeDisposable();
composite.addAll(disposable1, disposable2, disposable3)
composite.dispose()

所有这些都被处理掉了

复合一次性处理使处理变得更容易(考虑尽早取消)。假设您有一个同时发生多个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()
如果您改为使用复合可降解材料,则可以在其中存储所有一次性材料。像这样:

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的方法来处理该请求。

添加到上述CompositeDisposable中,无论添加和删除多个Disposable,都可以提供O(n)的一致时空复杂度,当活动或片段被销毁时,该复杂度也会被清除

CompositeDisposable
是一个方便的类,用于捆绑多个
一次性的
s,这样您就可以通过对
CompositeDisposable
的一个方法调用来处理它们

您可以使用
CompositeDisposable\add


您可以调用
CompositeDisposable#clear()
来处理所有已添加的
一次性的
。如果要处理所有当前的
一次性
s并自动处理将来添加的任何
一次性
s,请调用
CompositeDisposable#dispose()
。这有点道理,当您在上面调用
dispose()
时,您实际上是在处理
CompositeDisposable
,因此,您添加的任何
可处理的
都可以处理。

什么是可处理的它是一个可处理类的接口。可观察的、单一的、可完成的,也许所有这些都实现了这个接口。重要的是要处理您的可观察对象以避免内存泄漏CompositeDisposable与SerialDisposable之间有什么区别什么是一次性的?这与在列表中存储一次性的有什么区别?不多,除此之外,您可以在CompositeDisposable上调用dispose,而无需遍历列表中的所有项。这太棒了!因此,在添加每个
可观察的
单个
之后,我可以在一个调用中处理所有订阅,如
composite.dispose()