我知道DisposableObserver
已经实现了Observer
和Disposable
。将onSubscribe()
方法标记为final
,并提供onStart()
代替它。
但是我无法理解这两者之间的实际区别。当我应该使用Observer
或DisposableObserver
时?
您能否将使用它们的优点或缺点相互比较?
最佳答案
可以使用与该观察者相同的次数来调用普通的onSubscribe观察者方法。但是使用DisposableObserver
,只能调用一次onSubscibe
方法,这意味着您只能使用一次该DisposableObserver
。如果将DisposableObserver
的单个对象传递给两个流,它将抛出异常并快速关闭它们。此逻辑已在此类的onSubscribe()
中实现,因此您不能覆盖它。但是如果您需要onSubscribe()
回调,则可以覆盖相同的onStart()
方法。
此类的用法如下。
根据文档,DisposableObserver为:
通过实现Disposable允许异步取消的抽象Observer。
换句话说,这意味着您可以在观察者方法中使用一次性行为。就像在dispose()
中调用onNext()
一样。
Observable.just(1, 2, 3, 4, 5)
.map {
"$it"
}
.subscribe(object : DisposableObserver<String>(){
override fun onComplete() {
}
override fun onNext(t: String) {
println("first item only= $t")
//we can dispose this stream right in the observer methods
dispose()
}
override fun onError(e: Throwable) {
}
})
甚至可以将
DisposableObserver
与subscribeWith()
结合使用,以获得与普通观察者几乎相同的行为。val disposableObserver = object : DisposableObserver<String>() {
override fun onComplete() {
}
override fun onNext(t: String) {
println("first item only= $t")
//we can dispose this stream right in the observer methods
dispose()
}
override fun onError(e: Throwable) {
}
}
val disposable: Disposable = Observable.just(1, 2, 3, 4, 5)
.map {
"$it"
}
.subscribeWith(disposableObserver)
disposable.dispose()
RX-Java中的此类以及许多其他类和运算符可简化RX的使用,并且可以根据要使用该库的方式进行选择。