2012-06-09 2 views
2

У меня есть приложение, которое позволяет пользователям планировать сигналы тревоги в определенное время, повторяясь с интервалом по их выбору. Я использую JSON для сохранения информации о тревоге, используя SharedPreferences в качестве хранилища.Android AlarmManager Rescheduling Logic

Я использую AlarmManager, чтобы запланировать, когда мое приложение должно быть уведомлено о том, что сигнал должен звучать, чтобы уведомить пользователя. В настоящее время я использую метод setRepeating() AlarmManager, предоставляя интервал, предоставляемый пользователем. Это хорошо работает, и теоретически приложение никогда не будет нуждаться в обновлении JSon, который хранит следующее время будильника, поскольку AlarmManager просто перепланирует следующее время будильника с использованием интервала.

Однако, мое мышление, что, когда устройство перезагружается, я будет нужно предоставлять до времени даты тревоги на AlarmManager, чтобы избежать AlarmManager думать тревога была пропущена, поскольку это не обязательно так.

Итак, что это лучший способ сделать это?

  • обновить JSon следующее время будильника, когда звучит сигнал тревоги, даже если это может быть необязательно (setRepeating() обрабатывает это, пока нет перезагрузки)?
  • регистрируется и выслушивает выключение трансляции и обновляет JSon (это вызывает вопросы - как долго приложение сможет вычислить и записать информацию о тревоге в хранилище, учитывая, что телефон выключается)?
  • не обновлять JSon, но добавлять логику к объекту, который woken с помощью AlarmManager, чтобы решить, действительно ли сигнал тревоги только что передан, и пользователь должен быть предупрежден?

Я уверен, что любой из вышеперечисленных функций будет работать, но я не могу решить, какой это лучший способ сделать это.

ответ

1

Это похоже на выбор. Проблема, которую вы отмечаете, параллельна общей проблеме, наблюдаемой на ноутбуках Linux и решаемой anachrond. По-моему, я бы просто обновил время и сохранил его в SharedPreferences каждый раз, когда событие получено. Попытка прослушать, когда система выключится, может быть не совсем надежной (что происходит, когда ваши пользователи - возможно, пьяные студенты колледжа - бросают свое устройство, а батарея вылетает?). Вместо этого я считаю, что самое лучшее, что можно сделать в этом сценарии, было бы: каждый раз, когда срабатывает будильник, пересчитывать время, чтобы отправить следующий, сохранить его где-нибудь и по правилу загрузки.

+0

Хороший вопрос о выходе батареи! – barry

+0

Да, это распространенная проблема в приложениях предположить, что события жизненного цикла всегда будут идти так, как планировалось, на самом деле реальное устройство может умереть в любое время, а производственные приложения должны соответственно подготовиться :-) –