【问题标题】:MVVM - handling Disposable-s in ViewModel with RxJava and RoomMVVM - 使用 RxJava 和 Room 处理 ViewModel 中的 Disposable-s
【发布时间】:2018-10-14 19:52:34
【问题描述】:

我尝试在我的 Android 活动中应用 MVVM 模式(我是一个 Android 菜鸟)。

我在 RxJava 2 中使用 Room,例如这是我的存储库中方法的签名:

public Single<MissionTask> getMissionTaskByID(long id) {..}

在我的 ViewModel 类中,我引用了存储库和如下代码:

private void doSomethingOnUserEvent() {
    ...
      missionTaskRepository.getMissionTaskByID(firstID).
          observeOn(AndroidSchedulers.mainThread()).
          subscribeOn(Schedulers.io()).
          subscribe(missionTask ->
              {
                // do some work and update live data
              },
              t -> {
                // handle error
              });
    ...
  }

到目前为止一切顺利,表面上看起来一切正常。现在 - subscribe 返回一个 Disposable

我的问题是:

  1. 我应该如何处理一次性用品(例如,我可以将其放入复合一次性用品中,并在模型清除后丢弃复合材料)?
  2. 如果我不处理它会怎样?泄漏?为什么?

在我经历的一些示例中,没有处理 Disposable。

更新:我在android-architecture-components 中看到了composite disposable 的用法。

谢谢。

【问题讨论】:

标签: android mvvm rx-java2 android-room android-viewmodel


【解决方案1】:

只需在onCleared 中清除您的一次性/复合一次性用品,这就足够了

protected override onCleared(){
    if( diposable != null )
        disposable.dispose()
}

【讨论】:

  • 我猜到了,看到了如何使用一次性复合材料。但是我为什么要对 Room 这样做呢? :-)
  • 为什么你不应该?当您的视图模型被销毁时,您应该始终处理正在进行的操作,使用 Single 这确实没有 Observable 重要,因为它最终可能会自行处理,但可能会在 onCleard 之后
  • 在处理 Single 的情况下使用 subscribe 和 SingleObserver 可能是一个最佳实践?
猜你喜欢
  • 2018-09-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多