2017-01-02 7 views
5

В RxJava 1 подписка на Observer вернула подписку, которая может быть отписана.Disposeable for Observer

В RxJava 2, подписывающийся на Наблюдатель, возвращает 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 

EDIT: как обработать случай, когда мы используем наблюдатель, который сам по себе не реализует 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 

ответ

8

AllothersubscribemethodsreturnDisposable. В вашем примере TestObserver сам реализует Disposable, поэтому вы можете позвонить dispose() на самом наблюдателе, чтобы избавиться от подписки.

В противном случае вы можете использовать DisposableObserver в качестве базового класса для своих собственных наблюдателей, чтобы иметь поведение Disposable, предоставляемое вам абстрактным базовым классом.

EDIT ответить на обновленный вопрос:

В случае, если вам нужно использовать subscribe(Observer) метод (один возвращение Недействительными), но вы должны использовать Observer, который не реализует Disposable, вы до сих пор возможность обернуть ваш Observer в SafeObserver, который предоставит вам поведение Disposable (среди других гарантий соответствия контракту).

+0

В этом конкретном случае, который работает. Но что, если это не реализует это? Вроде бы это тема (обновленный вопрос). –

+0

Я обновил свой ответ. –

+0

Спасибо! Интересно, почему они изменили это. Это очень неудобно. –

 Смежные вопросы

  • Нет связанных вопросов^_^