RxJava2 onSubscribe和onComplete

时间:2018-08-12 18:28:28

标签: android kotlin rx-java2

我正在学习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()。我在做错什么吗?

0 个答案:

没有答案