如果对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()调用。