我知道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的使用,并且可以根据要使用该库的方式来选择它们中的任何一个。