重新订阅可观察的问题

时间:2019-07-01 13:57:18

标签: android rx-java viewmodel rx-java2

我正在跟踪Kaushik Gopal使用ViewStates Observable和ViewEffects Observable实现MVI。示例可以在这里看到:https://github.com/kaushikgopal/movies-usf/blob/master/app/src/main/java/co/kaush/msusf/movies/MSMovieVm.kt

相关代码段:

  init {
    eventEmitter
      .doOnNext { Timber.d("[Event]: $it") }
      .eventToResult()
      .doOnNext { Timber.d("[Result]: $it") }
      .share()
      .also { result ->
        viewStates = result
          .resultToViewState()
          .doOnNext { Timber.d("[ViewState]: $it") }
          .replay(1)
          .autoConnect(1) { disposable = it }
          .distinctUntilChanged()

        viewEffects = result
          .resultToViewEffect()
          .doOnNext { Timber.d("[ViewEffect]: $it") }
      }
  }

主要区别在于我使用的是“片段”而不是“活动”。一切都在第一次运行,但是当我从片段A转到片段B,然后回到片段A时,可观察到的结果触发新的ViewState,但是没有新的ViewEffects。我应该有一种特殊的订阅/退订方式,还是以一种奇怪的方式构造rx链?我目前在onViewCreated()中同时订阅了ViewStates和ViewEffects Observables,并在onViewDestroyed()中进行了处置。我已经验证了两种Observables在每种情况下都已订阅,只是当我回到Fragment A并输入新的ViewEvents时,我得到了新的ViewState,但没有ViewEffects。也许是多播问题?

0 个答案:

没有答案