Эта проблема первоначально наблюдалась в проекте с архитектурой MVVM (одно действие / несколько фрагментов) при выполнении операции вставки / удаления в базу данных и последующего перехода к исходному фрагменту.Затем домашний фрагмент повторно подписывается на LiveData в домашней ViewModel, и LiveData отправляет дважды:
- Одно неверное устаревшее событие, соответствующее до операции с базой данных
- Второе правильное событие, соответствующее послеоперация базы данных
Я создал очень простой пример проекта , чтобы продемонстрировать проблему (в примере нет MVVM или нескольких фрагментов). Вот анимированный GIF примера приложения
В примере приложения вы можете наблюдать устаревшее событие, используя следующие шаги:
- Подписаться на Room LiveData сКнопка НАБЛЮДАТЬ
- Отказаться от подписки LiveData с помощью кнопки ОТМЕНИТЬ
- Вставить элемент в базу данных комнат с помощью кнопки ДОБАВИТЬ
- Подписаться на LiveData для комнат с помощью кнопки НАБЛЮДАТЬ
Затем видно, что два события запущены.Первый - устаревший.
Может кто-нибудь знает, как обеспечить повторное выполнение только одного правильного события после повторной подписки на LiveData?
Примечание. См. "3. Сброс существующего наблюдателяMsgstr " для фона о том, как LiveData может обрабатываться в архитектуре с одним действием / несколькими фрагментами.Я использую этот подход, и это привело к этой проблеме.