Вычисление 3 дней для триггера менеджера тревог

Итак, у меня есть диспетчер будильников, который я должен отключать каждые три дня, когда он отключается, я записываю текущее системное время в общие настройки, чтобы, если телефон выключен, я знал, когда он был в последний раз активирован.

мой вопрос: как рассчитать 3 дня с момента последнего срабатывания после выключения телефона, поскольку я могу писать в общие настройки только при его срабатывании?

Я думал что-то вроде этого

long refresh = lastTime + (360000*24)*3;

где lastTime - это время, когда он был в последний раз запущен, но если телефон был перезагружен между ними, не прошло ли еще 3 дня после этого перезапуска, или я думаю, что это неправильно?


person tyczj    schedule 23.06.2011    source источник


Ответы (1)


У вас отсутствует ноль (в сутках 86400000 миллисекунд), но в остальном ваш подход выглядит нормально (при условии, что lastTime — это просто сохраненное значение из System.currentTimeMillis()). AlarmManager использует абсолютное время для времени запуска.

Если телефон был выключен более 3-х дней, то при восстановлении будильник будет просрочен и сработает сразу. Следует помнить, что если вы восстанавливаете повторяющийся будильник таким образом, и с момента его последнего срабатывания прошло 5 дней, то при восстановлении его с использованием даты в прошлом он сработает немедленно (просроченный будильник 3-го дня) и затем снова запустите через еще один день (сигнализация 6-го дня). Вы можете приспособиться к этому.

person Dan Dyer    schedule 23.06.2011