2016-10-07 7 views
0

Странно, что является причиной метода setInexactRepeating trigger примерно в заданное время, а не точное время.Почему setInexactRepeating в диспетчере аварийных сигналов срабатывает некорректно

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

Calendar calendar = Calendar.getInstance(); 
calendar.setTimeInMillis(System.currentTimeMillis()); 
// Set the alarm's trigger time to 8:30 a.m. 
calendar.set(Calendar.HOUR_OF_DAY, 8); 
calendar.set(Calendar.MINUTE, 30); 

alarmMgr.setInexactRepeating(AlarmManager.RTC_WAKEUP, 
calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY, alarmIntent); 

Я установил Время 8:30 утра в календаре, когда я перенести день устройства на следующий день, сигнализация получить триггер сразу, даже до того, как я переключу время устройства на 8:30 утра.

Что здесь происходит, почему я не могу сделать точный триггер, используя этот api, если у вас есть опыт, вы могли бы поделиться своим опытом. Благодаря!

+0

@Mike, это «setInexactRepeating» – chethan

+0

Да, извините, я не рассматривал возможный языковой барьер. «Неточность» означает «не точный». Если вам нужен точный, повторяющийся сигнал тревоги (начиная с KitKat), вам нужно использовать метод 'setExact *()' и каждый раз, когда он запускается, каждый раз устанавливайте будильник. –

ответ

1

Согласно документации (here) есть текст:

Как описано выше, выбирая тип тревоги часто первым шагом в создании тревогу. Еще одно отличие заключается в том, насколько точным вам нужен сигнал тревоги . Для большинства приложений setInexactRepeating() является правильным выбором. Когда вы используете этот метод, Android синхронизирует несколько неточных повторяющихся сигналов тревоги и одновременно запускает их. Это уменьшает утечку на батарею.

Для редких приложение, которое имеет жесткие требования, для времени, например, сигнализации нуждается стрелять точно в 8:30 утра, и каждый час на час после назначения setRepeating(). Но вы должны избегать использования точных сигналов тревоги , если это возможно.

С setInexactRepeating(), вы не можете указать пользовательский интервал по , как вы можете с setRepeating(). Вы должны использовать один из интервалов , таких как INTERVAL_FIFTEEN_MINUTES, INTERVAL_DAY и т. Д.

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

 Смежные вопросы

  • Нет связанных вопросов^_^