Комната LiveData срабатывает дважды с одной несвежей эмиссии - PullRequest
0 голосов
/ 20 сентября 2018

Эта проблема первоначально наблюдалась в проекте с архитектурой MVVM (одно действие / несколько фрагментов) при выполнении операции вставки / удаления в базу данных и последующего перехода к исходному фрагменту.Затем домашний фрагмент повторно подписывается на LiveData в домашней ViewModel, и LiveData отправляет дважды:

  • Одно неверное устаревшее событие, соответствующее до операции с базой данных
  • Второе правильное событие, соответствующее послеоперация базы данных

Я создал очень простой пример проекта , чтобы продемонстрировать проблему (в примере нет MVVM или нескольких фрагментов). Вот анимированный GIF примера приложения

В примере приложения вы можете наблюдать устаревшее событие, используя следующие шаги:

  • Подписаться на Room LiveData сКнопка НАБЛЮДАТЬ
  • Отказаться от подписки LiveData с помощью кнопки ОТМЕНИТЬ
  • Вставить элемент в базу данных комнат с помощью кнопки ДОБАВИТЬ
  • Подписаться на LiveData для комнат с помощью кнопки НАБЛЮДАТЬ

Затем видно, что два события запущены.Первый - устаревший.

Может кто-нибудь знает, как обеспечить повторное выполнение только одного правильного события после повторной подписки на LiveData?

Примечание. См. "3. Сброс существующего наблюдателяMsgstr " для фона о том, как LiveData может обрабатываться в архитектуре с одним действием / несколькими фрагментами.Я использую этот подход, и это привело к этой проблеме.

...