RxJava2中Observer与DisposableObserver之间的差异

问题描述 投票:1回答:1

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

但是我不明白两者在实际操作中有什么区别。而我应该何时使用ObserverDisposableObserver

您能否告诉您使用它们的优缺点?

rx-java2 reactivex
1个回答
0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.