Как я могу прекратить наблюдать наблюдаемое, не удаляя его в RxJava2? - PullRequest
0 голосов
/ 03 мая 2020

У меня необычная проблема с RxJava2.

По сути, у нас есть следующий сценарий:

  • Пользователь делает снимок и при следующем запуске запускает сетевой запрос
  • После завершения сетевого запроса выполняется метод во ViewModel , который запускает действие пользовательского интерфейса
  • Пользователь в любое время может нажать кнопку возврата , что должно перезапустить поток, и даже если предыдущая фотография успешно загружена, не должен запускать любой actions.

Теперь обычно я помещаю весь свой код в CompositeDisposable и вызываю clear () или dispose () в зависимости от моего случая. Это остановит наблюдение за загруженной фотографией после использования кнопки назад.

Однако я не могу вызвать clear () или dispose () в этом случае, потому что это прервет сетевой запрос t! Размер снимка обычно составляет 1-2 Мб, и при вызове dispose он прерывает сетевой запрос ... Как я могу прекратить наблюдать предыдущий поток и наблюдать только будущие загрузки, не прерывая предыдущую загрузку?

Я знаю, что должно быть какой-то способ уведомить мою наблюдаемую о том, что пользователь нажал кнопку «назад», но все мои попытки кажутся неудачными и нечистыми. Я хотел бы узнать, как правильно обращаться с таким делом.

1 Ответ

1 голос
/ 03 мая 2020

На мой взгляд, правильный способ - использовать takeUntil, чтобы вы могли отменить текущую загрузку, и она завершается в этот момент. Затем вам нужно будет использовать repeat для повторной подписки на будущие загрузки.

Примерно так:

compositeDisposable += nextButtonClicked
        .firstOrError()
        .flatMapCompletable {
          networkUpload.takeUntil(backButtonClicked).ignoreElements()
        }.repeat().subscribe()
...