我知道DisposableObserver已经实现了ObserverDisposable。将onSubscribe()方法标记为final,并提供onStart()代替它。

但是我无法理解这两者之间的实际区别。当我应该使用ObserverDisposableObserver时?

您能否将使用它们的优点或缺点相互比较?

最佳答案

可以使用与该观察者相同的次数来调用普通的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) {
            }

        })

甚至可以将DisposableObserversubscribeWith()结合使用,以获得与普通观察者几乎相同的行为。
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的使用,并且可以根据要使用该库的方式进行选择。

10-01 02:23