MVVM - обработка Disposable-ов во ViewModel с помощью RxJava и Room

Я пытаюсь применить шаблон MVVM в своей деятельности Android (я новичок в Android).

Я использую Room с RxJava 2, например это подпись метода в моем репозитории:

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-архитектура-компоненты.

Спасибо.

Используйте onCleared ... пример этого в github.com/joreilly/galway-bus-android/blob/master/base/src/‌…

John O'Reilly 04.05.2018 12:45

Посмотри может поможет: medium.com/@saquib3705/…

Mohd Saquib 07.05.2018 07:40
11
2
4 082
1

Ответы 1

Просто очистите одноразовый / композитный одноразовый предмет в onCleared, этого достаточно

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

Я догадался об этом и увидел, как пользоваться одноразовым композитом. Но зачем мне делать это с Room? :-)

Lachezar Balev 04.05.2018 12:49

почему ты не должен? вы всегда должны избавляться от текущих действий, когда ваша модель просмотра уничтожена, с Single это действительно не так важно, чем Observable, поскольку он может в конечном итоге избавиться от себя, но может быть после onCleard, хотя

Samuel Eminet 04.05.2018 12:58

Может быть, было бы лучше использовать подписку с SingleObserver в случае, когда обрабатываете Single?

Lachezar Balev 04.05.2018 13:13

Другие вопросы по теме