Я не уверен, но, насколько мне известно, я разделяю свои взгляды. Я всегда принимаю лучший ответ, если ошибаюсь.
Менеджер по тревоге
Менеджер аварийных сигналов удерживает блокировку пробуждения ЦП, onReceive()пока выполняется метод приемника аварийных сигналов . Это гарантирует, что телефон не перейдет в спящий режим, пока вы не завершите обработку трансляции. После onReceive()возврата диспетчер сигналов тревоги снимает эту блокировку пробуждения. Это означает, что в некоторых случаях телефон перейдет в спящий режим, как только ваш onReceive()метод завершится. Если ваш приемник будильника звонил Context.startService(), возможно, телефон перейдет в спящий режим до запуска запрошенной службы. Чтобы предотвратить это, ваш BroadcastReceiverиService нужно будет реализовать отдельную политику блокировки бодрствования , чтобы убедиться , что телефон продолжает работать , пока служба не станет доступной.
Примечание. Диспетчер сигналов тревоги предназначен для случаев, когда вы хотите, чтобы код вашего приложения запускался в определенное время, даже если ваше приложение в данный момент не запущено. Для обычных операций с таймингом (тики, тайм-ауты и т. Д.) Проще и эффективнее использовать Handler.
таймер
timer = new Timer();
timer.scheduleAtFixedRate(new TimerTask() {
synchronized public void run() {
\\ here your todo;
}
}}, TimeUnit.MINUTES.toMillis(1), TimeUnit.MINUTES.toMillis(1));
Timerимеет некоторые недостатки, которые устраняются с помощью ScheduledThreadPoolExecutor. Так что это не лучший выбор
ScheduledThreadPoolExecutor .
Вы можете использовать java.util.Timerили ScheduledThreadPoolExecutor(предпочтительно), чтобы запланировать действие, которое должно происходить через регулярные промежутки времени в фоновом потоке.
Вот пример использования последнего:
ScheduledExecutorService scheduler =
Executors.newSingleThreadScheduledExecutor();
scheduler.scheduleAtFixedRate
(new Runnable() {
public void run() {
// call service
}
}, 0, 10, TimeUnit.MINUTES);
Так что я предпочел ScheduledExecutorService
Но также подумайте о том, что если обновления будут происходить во время работы вашего приложения, вы можете использовать Timer, как предлагается в других ответах, или более новый ScheduledThreadPoolExecutor. Если ваше приложение будет обновляться, даже если оно не запущено, вам следует использовать расширение AlarmManager.
Диспетчер сигналов тревоги предназначен для случаев, когда вы хотите, чтобы код вашего приложения запускался в определенное время, даже если ваше приложение в настоящее время не запущено.
Обратите внимание, что если вы планируете обновлять, когда ваше приложение выключено, раз в десять минут это довольно часто и, следовательно, может быть слишком энергоемким.