我正在学习RxJava2,并且对防止内存泄漏的正确用法有疑问。
我是否需要确保每次onSubscribe()被调用时都会调用onComplete()?
我的流设置如下:
Observables.combineLatest(
siteDataController
.GetCurrentSelectionObservable()
.distinctUntilChanged { site -> site.GetStid() },
uiController
.GetDisplayFieldsObservable()
.observeOn(AndroidSchedulers.mainThread())
) { site, data -> Pair(site, data) }
.takeWhile{continueUpdates.get()}
.subscribeOn(Schedulers.computation())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(object : Observer<Pair<SiteDataController.ProcessedSite, UIController.DisplayFields>> {
override fun onComplete() {
Log.e("Lifespan", "Site / UI onComplete()")
}
override fun onSubscribe(d: Disposable) {
Log.e("Lifespan", "Site / UI onSubscribe()")
disposable = d
}
override fun onNext(t: Pair<SiteDataController.ProcessedSite, UIController.DisplayFields>) {
// use result to build out ui
}
override fun onError(e: Throwable) {
e.printStackTrace()
}
})
这在片段的onResume()中进行设置。另外,“ continueUpdates”在onResume()中设置为true,在onPause()中设置为false。组成CombineLatest()流的两个Observable的根都是BehaviorSubjects。但是,尽管将takeWhile条件切换为false,并且即使在两个BehaviorSubjects上都调用了onComplete(),也从未调用观察者上的onComplete()。我在做错什么吗?