2016-08-23 4 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.