2016-08-23 1 views
0

ライブフィードから作成されたObservableの購読を解除する方法を理解しようとしています。ここ は多かれ少なかれコードです:ライブストリームの登録を解除するには

SomeFeed feed = new SomeFeed(); 
Observable<PriceTick> observable = Observable.create(s -> 
    feed.register(new SomeListener() { 
    @Override 
    public void priceTick(PriceTick event) { 
     s.onNext(event); 
    } 

    @Override 
    public void error(Throwable throwable) { 
     s.onError(throwable); 
    } 
    }) 
); 
Subscription subscription = observable.subscribe(System.out::println); 
subscription.unsubscribe(); 
System.out.println("Is unsubscribed:" + subscription.isUnsubscribed()); // prints true 

私はサブスクリプションが解除された後、加入者はまだイベントストリームを出力していることを発見しています。

サブスクリプションから更なる通知を受け取らないようにするには、どうすればよいですか?

答えて

1

あなたが作成した観測可能性は、Observable契約に従わない。退会と退職を処理していません。 Observable.createは、そのようなオブザーバを作成しやすくします。

代わりに、他の手法を使用して観測値を作成することができます。オブザーバブルは、defer演算子またはObservable.fromCallable演算子を使用して作成できます。

あなたのコードのためには使用することができます。

Observable<PriceTick> observable = Observable.create(s -> 
    feed.register(new SomeListener() { 
    @Override 
    public void priceTick(PriceTick event) { 
     if(!s.isUnsbscribed()) { 
     s.onNext(event); 
     } 
    } 

    @Override 
    public void error(Throwable throwable) { 
     if(!s.isUnsbscribed()) { 
     s.onError(throwable); 
     } 
    } 
    }) 
); 

これをまだbackpreasureを処理しません。

オブザーバブルの作成の詳細here

関連する問題