如果onComplete调用是针对RxJava主题的,我是否必须再次手动取消订阅



我在片段中使用RxJava ReplaySubject。

我试图以某种方式使用ReplaySubject,我希望Subject执行一个过程直到完成(可能超过片段的生命周期)。

在完成这一过程后,我想释放资源,据我所知,这是通过在注册观察员时取消订阅来完成的(在我的情况下,这就是主题本身)。

在这个github问题线程@benjchristensen说:

如果它是一个Observable,那么它应该发出一个onCompleted并完成。

如果它是一个Observer,那么它应该取消订阅它在调用Observable.subscribe时收到的订阅,这将给Observable一个关闭和清理的机会。

如果它是一个主体——既是观察者又是可观察者——行为是什么?如果我在主题上调用onComplete,这基本上意味着订阅被停止了吗?因此,我无需通过注册观察员手动取消订阅订阅?

Subject是Observable之上相对较薄的一层,允许您从Observable外部的源提供onNext()onCompleted()onError()调用。它们的取消订阅行为与Observable相同。如果在主题上调用onCompleted()onError(),则订阅者将被取消订阅。对于Observable.subscribe()返回的订阅,无需调用unsubscribe()

对于ReplaySubject,请注意,在对其进行垃圾收集之前,不会清理资源。即使在ReplaySubject上呼叫了onCompleted()之后,订户仍然可以订阅,并且它将接收在订阅之前进行的所有原始onNext()onCompleted()onError()呼叫。

最新更新