Обновление данных при смене дня в автономном приложении
У меня есть автономное приложение, которое хранит данные в RoomDatabase. Новые данные вставляются только после действий пользователя (при нажатии кнопки или изменении выбора счетчика). Данные извлекаются как LiveData. В своей основной деятельности я показываю только данные за текущий день. Но моя проблема возникает, когда день меняется, и приложение все еще находится в фоновом режиме, не убитое системой. В этой ситуации активность все еще показывает данные за предыдущий день. Как реализовать обновление, если текущая дата отличается от даты, показанной в активности? Когда приложение было убито, у меня есть метод в onCreate, который пытается вставить новую строку (с игнорированием onConflict), и это работает. Но если есть лучший способ, я открыт для предложений.
Дао (я получаю только строку с датой, которая соответствует пройденной дате)
@Query("SELECT * from coffee_productivity WHERE date LIKE :todayDate")
fun getTodayData(todayDate: String): LiveData<CoffeeProductivityData>
вместилище
private var mTodayData: LiveData<CoffeeProductivityData> = mCoffeeProductivityDao.getTodayData(mUtilities.getTodayDate())
// Wrapper for getting current day data
fun getTodayData(): LiveData<CoffeeProductivityData> {
return mTodayData
}
ViewModel
private val mTodayData: LiveData<CoffeeProductivityData> by lazy {
mRepository.getTodayData()
}
// Get LiveData for today coffees and productivity
fun getTodayData(): LiveData<CoffeeProductivityData> {
return mTodayData
}
1 ответ
Ты можешь использовать AlarmManager
разбудить телефон в полночь, а затем позвонить
AlarmManager API - это еще одна опция, которую платформа предоставляет для планирования задач. Этот API полезен в тех случаях, когда приложению необходимо опубликовать уведомление или включить тревогу в определенное время.
Источник: разработчик