В приложении я извлекаю все данные из фиксированного пользовательского файла. таблицу расходов (например, ежемесячный потоковый сервис, кабельное телевидение и т. д.) и наблюдение за потоком в моей ViewModel. DAO возвращает Flow.
В ViewModel я собираю поток внутри области ViewModel. Внутри блока сбора я проверяю, не истек ли срок платежа. Если это так, я добавляю новый расход в таблицу «Расходы» и обновляю дату последней оплаты фиксированных расходов, чтобы предотвратить повторную оплату тех же расходов при следующей проверке. (С проверкой проблем нет; раньше я проводил модульные тесты, и все работало нормально без сохранения данных в Room).
Код: Выделить всё
private fun observeFixedTransaction() {
viewModelScope.launch {
fixedExpenseRepository.fetchAll()
.distinctUntilChanged()
.collectLatest{
checkDueTransactions(it)
}
}
}
Почему поток генерирует более одного раза, когда я добавляю новую строку или начинаю собирать поток?
Я также пробовал использовать устранение дребезга, но это не сработало.
Я пробовал использовать устранение дребезга, но если я не установил timemilis примерно на 10 секунд, это не сработает. Также пытался использовать семафор с помощью tryacquire, но блок сбора игнорировал семафор (он был инициализирован внутри класса viewModel).
Подробнее здесь: https://stackoverflow.com/questions/787 ... flow-works
Мобильная версия