什么是RxJava中的CompositeDisposable

Tes*_*ter 28 android rx-java

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

Jim*_*aca 36

复合一次性使处理(认为提前取消更容易).假设您有一个活动同时发生多个api调用:

var disposable = api.call1(arg1, arg2).subscribe(...)
var disposable2 = api.call2(arg1).subscribe(...)
var disposable3 = api.call3().subscribe()
Run Code Online (Sandbox Code Playgroud)

如果您需要提前处置(例如,用户导航远离活动),那么您需要这样做:

disposable.dispose()
disposable2.dispose()
disposable3.dispose()
Run Code Online (Sandbox Code Playgroud)

如果您改为使用CompositeDisposable,则可以将所有一次性物品存储在其中.像这样:

val composite = CompositeDisposable()
composite.add(api.call1(arg1, arg2).subscribe(...))
composite.add(api.call2(arg1).subscribe(...))
composite.add(api.call3().subscribe())
Run Code Online (Sandbox Code Playgroud)

然后你可以拨打一个处理电话:

composite.dispose()
Run Code Online (Sandbox Code Playgroud)

如果您使用的是kotlin,您可以使用运算符重载来使其看起来更好:

  operator fun CompositeDisposable.plusAssign(disposable: Disposable){
        this.add(disposable)
    }
Run Code Online (Sandbox Code Playgroud)

这使您能够表达为:

val composite = CompositeDisposable()
composite += api.call1(arg1, arg2).subscribe(...)
composite += api.call2(arg1).subscribe(...)
composite += api.call3().subscribe()
Run Code Online (Sandbox Code Playgroud)

Disposable表示请求(认为正在完成工作)并且有一个名为dispose的方法来处理请求.


And*_*sch 9

CompositeDisposable是一个方便的类,用于捆绑多个Disposables,以便您可以通过一个方法调用来处理它们CompositeDisposable

您可以将一次性用品添加到CompositeDisposablewithCompositeDisposable#add

不是单独调用dispose()每个Disposable,而是调用CompositeDisposable#clear()处理所有Disposable已添加的 s。如果要处理所有当前的Disposables自动处理Disposable将来添加的任何s,请调用CompositeDisposable#dispose(). 这是有道理的,CompositeDisposable当你调用dispose()它时,你实际上是在处理它,所以Disposable你添加的任何s 都被处理是有道理的。


Lea*_*ira 6

CompositeDisposable只是一类将所有一次性用品都放在同一位置,以便您可以一次处理所有一次性用品。喜欢:

Disposable disposable1;
Disposable disposable2;
Disposable disposable3;

CompositeDisposable composite = new CompositeDisposable();
composite.addAll(disposable1, disposable2, disposable3)
composite.dispose()
Run Code Online (Sandbox Code Playgroud)

所有这些都被处置

  • 它是可以处理的类的接口。Observable,Single,Completable和Maybe都实现了此接口。放置可观察对象以避免内存泄漏很重要 (3认同)
  • 一次性用品 (2认同)