2017-01-02 32 views
5

RxJava 1'de bir Gözlemci ile abone olmak, aboneliği iptal edilebilecek bir Abonelik döndürdü.Gözlemci için Tek Kullanımlık

RxJava 2'de bir Gözlemci ile abone, void ve Disposeable yok değerini döndürür. Bu "Abonelik" i durdurmak nasıl mümkün olabilir?

// 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 

DÜZENLEME: Biz kendisini BehaviorSubject gibi Disposable uygulamıyor bir gözlemci kullanmak nerede nasıl, davayı ele? Bu örnekteki gibi:

// 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 

cevap

8

Allothersubscribemethodsreturn bir Disposable. Örneğinizde, TestObserver'un kendisi Disposable'u uygular, böylece aboneliği atmak için gözlemcinin üzerinde dispose()'u arayabilirsiniz.

Aksi takdirde, DisposableObserver'u, kendi özel gözlemcileriniz için temel sınıf tarafından size sağlanan Disposable davranışına sahip olmanız için bir temel sınıf olarak kullanabilirsiniz. Eğer subscribe(Observer) yöntemi (bir dönen boşluk) kullanmak gerekir, ancak, yine de var Disposable uygulamıyor hangi bir Observer kullanmak gerekir durumunda

:

DÜZENLEME güncellenen soruyu cevaplamak için Observer ürününü SafeObserver ürününe aktarma seçeneği, Disposable (size diğer sözleşme uygunluk garantileri arasında) davranış sağlar.

+0

Bu özel durumda çalışır. Ama ya bunu uygulamıyorsa? Onun bir konu (güncellenmiş soru) gibi. –

+0

Cevabımı güncelledim. –

+0

Teşekkürler! Bunu neden değiştirdiklerini merak ediyorum. Bu çok sakıncalı. –