Использование AlarmManager в Android для запуска ежедневного обслуживания? - PullRequest
3 голосов
/ 30 мая 2010

Мне нужно запускать службу каждую ночь в полночь. Я хотел бы использовать AlarmManager для этого.

Можете ли вы дать мне несколько советов, как заставить его работать правильно?

alarmManager = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
alarmManager.setInexactRepeating(AlarmManager.ELAPSED_REALTIME, System.currentTimeMillis(), AlarmManager.INTERNAL_DAY, serviceIntent);

Возможно, мне нужно использовать объект Calendar, чтобы указать время? Спасибо за любую помощь!

Ответы [ 2 ]

6 голосов
/ 31 мая 2010

setInexactRepeating(), как следует из названия, неточно. Имейте в виду, что он может работать до или после полуночи.

Чтобы определить, когда наступит полночь, используйте Calendar объект . Затем позвоните getDate(), чтобы получить Date и getTime() на Date, чтобы получить правильное значение в миллисекундах для вашего setInexactRepeating() вызова.

0 голосов
/ 08 мая 2011

Если вы хотите, чтобы ваш код запускался в полночь, не используйте setInexactRepeating. На самом деле вам нужно: alarmManager.setRepeating(RTC_WAKEUP, ...), а затем использовать Calendar для вычисления следующей полуночи, в которую вы хотите пробежать.

Если необходимость пробуждения в полночь зависит от активности пользователя, поэтому нет необходимости пробуждать телефон ровно в полночь, просто если сначала нужно запустить действие, если пользователь использует телефон после полуночи, вы можете изменить RTC_WAKEUP до RTC. Хотя эффект пробуждения от батареи ровно в полночь с RTC_WAKEUP должен быть незначительным, так что, вероятно, проще просто вызвать пробуждение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...