如果对RxJava主题进行onComplete调用,是否需要再次手动取消订阅?
我在我的片段中使用RxJava ReplaySubject 。
我试图以某种方式使用ReplaySubject,在那里我希望主体执行一个进程直到完成(可能超出片段的生命期)。
在完成这个过程之后,我想释放资源,据我所知,在注册观察者(在我的情况下,是主题本身)时,退订了这个资源。
在这个github的问题线程 @benjchristensen说:
如果它是一个Observable,那么它应该发出一个onCompleted并完成。
如果它是一个观察者,那么当它调用Observable.subscribe时,它应该取消订阅它接收到的订阅,它将使Observable有机会closures和清理。
如果它是一个主体 – 既是观察者又是观察者 – 这是什么行为? 如果我打电话onComplete关于这个问题,这基本上是否意味着订阅被停止,我因此无需手动取消订阅我通过注册观察员得到的订阅?
主题是Observable顶部的一个相对较薄的层,允许您从Observable外部的源提供onNext()
, onCompleted()
和onError()
调用。 他们的退订行为与Observable相同。 如果在Subject上调用onCompleted()
或onError()
,则订阅者将被取消订阅。 从Observable.subscribe()
返回的订阅无需调用unsubscribe()
Observable.subscribe()
。
对于ReplaySubject
,请注意,只有在垃圾收集之前资源才会被清理。 即使在ReplaySubject
上调用了onCompleted()
之后,订阅者仍然可以订阅,并且将接收订阅之前完成的所有原始onNext()
, onCompleted()
或onError()
调用。