MVVM - 使用RxJava和Room处理ViewModel中的Disposable-s

时间:2018-05-04 10:41:31

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

我尝试在我的Android活动中应用MVVM模式(我是Android noob)。

我使用带有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. 如果我不处理会怎么样?泄漏?为什么?
  3. 在我所经历的一些例子中,没有处理Disposable。

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

    感谢。

1 个答案:

答案 0 :(得分:0)

只需清除您在onCleared处理的一次性/复合材料,这就足够了

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