2016-10-11 2 views
0

ResourceSubscriber의 add(Disposable) 메소드의 사용 사례를 파악할 수 없습니다.ResourceSubscriber의 add 메소드의 사용 사례는 무엇입니까?

add(Disposable) 방법은 여러 개의 disposables를 처리하는 데 사용될 수 있다고 생각했습니다.

그러나 일부 구독을 함께 처분하려는 경우 나는 CompositeSubscription을 사용하고 subscribeWith 메서드의 반환 값에서 Disposables를 추가합니다. 또한이 방법은 읽기 쉽습니다.

주 유동성이 완료되었을 때, 완성 된 유동성이 배치 된 유동성이 될 수 있으므로 추가 유동성이 자동으로 처리 될 수 있다고 생각했습니다. 그래서, 나는 울부 짖었다. f1이 완료된 후

Flowable<Long> f1 = Flowable.interval(100L, TimeUnit.MILLISECONDS).take(3); 
Flowable<Long> f2 = Flowable.interval(200L, TimeUnit.MILLISECONDS); 

ResourceSubscriber<Long> s = new ResourceSubscriber<Long>() { 
    ... 
}; 

s.add(f2.subscribeWith(new DisposableSubscriber<Long>() { 
    ... 
})); 

f1.subscribe(s); 

그러나, f2 작동 유지했다. f2가 삭제되지 않았습니다.

이제 ResourceSubscriber의 add(Disposable) 메소드의 좋은 사용 사례가 무엇인지 궁금합니다.

답변

1

ResourceSubscriberDisposable 리소스를 1.x Subscriber과 비슷한 방식으로 등록 할 수 있으며 1.x에서 2.x 로의 전환을 용이하게합니다. 그러나 리소스 만 추적하므로 해당 리소스를 처리하려면 onErroronComplete 구현에서 dispose을 수동으로 호출해야합니다.

+0

정보를 제공해 주셔서 감사합니다. 자, 사용법을 이해합니다. 나는 oncompleted에서'unsubscribe()'를 호출하지 않는 1.x에서 비슷한 코드를 시도했지만 메인 구독이 완료되었을 때 추가 된 구독은 구독 취소되었다. 그런 다음 2.0 코드에서'onCompele()'에'dispose()'를 추가했는데 결과적으로 추가 된 Subscription이 삭제되었습니다. – arching

+0

1.x에서는 거의 모든 가입자가 가입자의 구독을 거부하는 'SafeSubscriber'로 포장됩니다. 2.x에서는 전체 라이브러리에 많은 오버 헤드를 절약하기 위해 기본적으로이 작업을 수행하지 않습니다. – akarnokd

+0

설명해 주셔서 감사합니다! 그 이유는 성능 문제 였기 때문에 그 변화는 이해할 수 있습니다. 아마도, 사용자가 ResourceSubscription의'add (Disposable)'을 사용할 때'onComplete'와'onError'에서'dispose'가 호출되는 것이 좋을지도 모릅니다. – arching

관련 문제