RxJava2中Observer和DisposableObserver的区别
Difference between Observer and DisposableObserver in RxJava2
我知道 DisposableObserver
已经实现了 Observer
和 Disposable
。将 onSubscribe()
方法标记为 final
并提供 onStart()
代替它。
但是我不明白这两者在操作上有什么区别。什么时候应该使用 Observer
或 DisposableObserver
?
您能说说使用它们的优缺点吗?
观察者的普通onSubscribe 方法可以调用多少次,只要你使用同一个观察者。但是 DisposableObserver
onSubscibe
方法只能调用一次,这意味着您只能使用此 DisposableObserver
一次。如果将 DisposableObserver
的单个对象传递给两个流,它将抛出异常并快速关闭它们。此逻辑已在 class 的 onSubscribe()
中实现,因此您无法覆盖它。但如果您需要 onSubscribe()
回调,您可以覆盖相同的 onStart()
方法。
这个class的用法可以如下
根据文档,DisposableObserver 是:
An abstract Observer that allows asynchronous cancellation by implementing Disposable.
换句话说,这意味着您可以在观察者方法中使用一次性行为。就像在 onNext()
.
中调用 dispose()
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 中的许多其他 classes 和运算符都是为了简化 RX 的使用,并且可以根据您希望如何使用库来选择其中的任何一个。
我知道 DisposableObserver
已经实现了 Observer
和 Disposable
。将 onSubscribe()
方法标记为 final
并提供 onStart()
代替它。
但是我不明白这两者在操作上有什么区别。什么时候应该使用 Observer
或 DisposableObserver
?
您能说说使用它们的优缺点吗?
观察者的普通onSubscribe 方法可以调用多少次,只要你使用同一个观察者。但是 DisposableObserver
onSubscibe
方法只能调用一次,这意味着您只能使用此 DisposableObserver
一次。如果将 DisposableObserver
的单个对象传递给两个流,它将抛出异常并快速关闭它们。此逻辑已在 class 的 onSubscribe()
中实现,因此您无法覆盖它。但如果您需要 onSubscribe()
回调,您可以覆盖相同的 onStart()
方法。
这个class的用法可以如下
根据文档,DisposableObserver 是:
An abstract Observer that allows asynchronous cancellation by implementing Disposable.
换句话说,这意味着您可以在观察者方法中使用一次性行为。就像在 onNext()
.
dispose()
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 中的许多其他 classes 和运算符都是为了简化 RX 的使用,并且可以根据您希望如何使用库来选择其中的任何一个。