我在片段中使用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()
呼叫。