2014-09-02 4 views
40

내 조각에 RxJava ReplaySubject을 사용하고 있습니다.RxJava Subject에 대해 onComplete 호출이 발생하면 수동으로 다시 구독을 취소해야합니까?

어떤 방식 으로든 ReplaySubject를 사용하려고합니다. 주제가 완료 될 때까지 (가능한 한 프래그먼트의 수명을 넘어서서) 프로세스를 실행하기를 원합니다.

과정이 완료되면, 관찰자 ​​(내 경우에는 주제 자체)를 등록 할 때 구독을 구독 취소하여 수행 한 자원을 공개하고 싶습니다. 이 github issue thread @benjchristensen에서

는 말한다 :

그 다음은 onCompleted을 방출해야하고 할 피 감시 경우.

Observer 인 경우 Observable.subscribe를 호출 할 때 수신 한 Subscription을 수신 거부해야하며 Observable에게 종료 및 정리할 수있는 기회를 제공합니다.

주체 (Observer와 Observable 모두) 인 경우 동작이 어떻게됩니까? 주제에 대해 onComplete를 호출하면 기본적으로 구독이 중지된다는 의미이며, 따라서 구독자를 수동으로 구독 취소해야하므로 안심입니다.

답변

56

피사체는 Observable 외부의 소스에서 onNext(), onCompleted()onError() 번의 호출을 제공 할 수 있도록 Observable 위에 비교적 얇은 레이어입니다. 그들의 구독 취소 행동은 Observable과 동일합니다. 제목에 onCompleted() 또는 onError()이 호출되면 구독자가 구독 취소됩니다. 구독시 unsubscribe()에 전화 할 필요없이 Observable.subscribe()에서 반환됩니다.

ReplaySubject의 경우 리소스는 가비지 수집 될 때까지 정리되지 않습니다. onCompleted()ReplaySubject에서 호출 된 후에도 구독자는 계속 구독 할 수 있으며 구독하기 전에 수행 된 원래 onNext(), onCompleted() 또는 onError() 호출을 모두 받게됩니다.

+0

ReplaySubject의 좋은 점. –

+0

변환 된 observables .cache 및 .replay의 경우에도 마찬가지입니까? – Zardoz

+1

어딘가에 설명서에 언급되어 있습니까? 나는이 스레드를 발견하기 전에 문자 그대로 오늘이 시간을 보냈다. –

관련 문제