如果对RxJava主题进行onComplete调用,是否必须再次手动取消订阅?

Kau*_*pal 44 android rx-java

我正在片段中使用RxJava ReplaySubject.

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

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

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

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

如果它是Observer,则它应该取消订阅它在调用Observable.subscribe时收到的订阅,它将使Observable有机会关闭和清理.

如果它是一个主体 - 它既是观察者又是观察者 - 行为是什么?如果我在主题上调用onComplete,这是否基本上意味着订阅被停止,因此我不需要通过注册观察者手动取消订阅我获得的订阅?

kjo*_*nes 62

主题是上可观察到的,允许你饲料的顶部相对较薄的层onNext(),onCompleted()onError()从外部可观察源呼叫.他们的取消订阅行为与Observable相同.如果onCompleted()还是onError()被呼吁的主题,该用户将被取消订阅.无需调用unsubscribe()返回的订阅Observable.subscribe().

对于a ReplaySubject,请注意,在收集垃圾之前,不会清理资源.即使在onCompleted()被称为上ReplaySubject,用户仍然可以订阅,它将接收到原始的一切onNext(),onCompleted()或者onError()说是前所做的订阅服务.

  • 这在文档中的某个地方提到过吗?在我找到这个线程之前,我今天真的花了 1 个小时来解决这个问题。 (2认同)