У меня есть приложение, которое позволяет пользователям планировать сигналы тревоги в определенное время, повторяясь с интервалом по их выбору. Я использую JSON для сохранения информации о тревоге, используя SharedPreferences в качестве хранилища.Android AlarmManager Rescheduling Logic
Я использую AlarmManager, чтобы запланировать, когда мое приложение должно быть уведомлено о том, что сигнал должен звучать, чтобы уведомить пользователя. В настоящее время я использую метод setRepeating() AlarmManager, предоставляя интервал, предоставляемый пользователем. Это хорошо работает, и теоретически приложение никогда не будет нуждаться в обновлении JSon, который хранит следующее время будильника, поскольку AlarmManager просто перепланирует следующее время будильника с использованием интервала.
Однако, мое мышление, что, когда устройство перезагружается, я будет нужно предоставлять до времени даты тревоги на AlarmManager, чтобы избежать AlarmManager думать тревога была пропущена, поскольку это не обязательно так.
Итак, что это лучший способ сделать это?
- обновить JSon следующее время будильника, когда звучит сигнал тревоги, даже если это может быть необязательно (setRepeating() обрабатывает это, пока нет перезагрузки)?
- регистрируется и выслушивает выключение трансляции и обновляет JSon (это вызывает вопросы - как долго приложение сможет вычислить и записать информацию о тревоге в хранилище, учитывая, что телефон выключается)?
- не обновлять JSon, но добавлять логику к объекту, который woken с помощью AlarmManager, чтобы решить, действительно ли сигнал тревоги только что передан, и пользователь должен быть предупрежден?
Я уверен, что любой из вышеперечисленных функций будет работать, но я не могу решить, какой это лучший способ сделать это.
Хороший вопрос о выходе батареи! – barry
Да, это распространенная проблема в приложениях предположить, что события жизненного цикла всегда будут идти так, как планировалось, на самом деле реальное устройство может умереть в любое время, а производственные приложения должны соответственно подготовиться :-) –