6

RxJava 1 では、オブザーバーを使用してサブスクライブすると、サブスクライブを解除できるサブスクリプションが返されました。

RxJava 2 では、Observer でサブスクライブすると void が返され、Disposeable は返されません。その「サブスクリプション」を停止するにはどうすればよいですか?

// v1
rx.Observable<Long> v1hot = rx.Observable.interval(1, TimeUnit.SECONDS);
rx.Observer<Long> v1observer = new TestSubscriber<>();
Subscription subscription = v1hot.subscribe(v1observer);
subscription.unsubscribe();

// v2
Observable<Long> v2hot = Observable.interval(1, TimeUnit.SECONDS);
Observer<Long> v2Observer = new TestObserver<>();
v2hot.subscribe(v2Observer); // void

編集Disposable: のように、それ自体が実装されていBehaviorSubjectないオブザーバーを使用する場合の処理​​方法 この例のように:

// v1
rx.Observable<Long> v1hot = rx.Observable.interval(1, TimeUnit.SECONDS);
rx.Observer<Long> v1observer = rx.subjects.BehaviorSubject.create();
Subscription subscription = v1hot.subscribe(v1observer);
subscription.unsubscribe();

// v2
Observable<Long> v2hot = Observable.interval(1, TimeUnit.SECONDS);
Observer<Long> v2Observer = BehaviorSubject.createDefault(-1L);
v2hot.subscribe(v2Observer); // void
4

2 に答える 2

9

他の すべてのサブスクライブ メソッドは を 返しますDisposable。あなたの例では、TestObserverそれ自体が を実装Disposableしているため、オブザーバー自体を呼び出しdispose()てサブスクリプションを破棄できます。

それ以外の場合はDisposableObserver、独自のカスタム オブザーバーの基本クラスとして使用してDisposable、抽象基本クラスによって提供される動作を行うことができます。

編集して、更新された質問に答えます。

subscribe(Observer)メソッド (void を返すメソッド) を使用する必要があるが、 を実装しない を使用する必要がある場合Observerでも、動作を提供する でラップDisposableするオプションがあります(他の契約準拠保証の中でも特に) 。 .ObserverSafeObserverDisposable

于 2017-01-02T15:27:17.160 に答える