2014-09-24 3 views
1

Недавно, в моем приложении таймера, запуск таймера в первый раз вызывает его срабатывание тревоги примерно через две или три секунды после его появления. Странно, что это происходит только в первый раз, когда я запускаю таймер после установки приложения через Android Studio. Каждый раз после этого он работает как ожидалось, и таймер гаснет после ожидаемого времени.Почему будильник AlarmManager задерживается при первом запуске?

Вот соответствующий код:

 if(LOG) Log.v(TAG,"Starting the timer service: "+ TimerUtils.time2humanStr(context, mTime)); 

     Intent intent = new Intent(this, TimerReceiver.class); 
     mPendingIntent = PendingIntent.getBroadcast(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); 
     mAlarmMgr.set(AlarmManager.ELAPSED_REALTIME, SystemClock.elapsedRealtime() + mTime, mPendingIntent); 

Переменная mTime установлена ​​правильно каждый раз, в зависимости от мощности LogCat:

Starting the timer service: 5 seconds 

И это прекрасно работает каждый раз после первого запуска. Раньше он работал нормально; это может быть проблемой для Android или Android Studio? Или мне нужно что-то инициализировать? Я знаю, что не могу ожидать точных ответов, не сбрасывая весь мой код здесь, я просто ищу намеки (спекуляции?) О том, почему это поведение может произойти.

ответ

1

Вы используете API 19? Проверьте это примечание в документации:

Примечание: Начиная с API 19, время запуска прошел к этому методу рассматривается как неточные: сигнал не будет доставлен до этого времени, , но может быть отложен и спустя некоторое время. ОС будет использовать эту политику для того, чтобы «пакетные» сигналы тревоги находились вместе по всей системе , сводя к минимуму количество раз, когда устройство должно «просыпаться» и минимизировать использование батареи. В общем случае тревоги, запланированные в ближайшем будущем , не будут отложены до тех пор, пока аварийные сигналы, запланированные далеко в будущем .

Источник: AlarmManager

+1

Если бы это было так, то почему бы это случиться только в первый раз? Я попытался использовать 'setExact()', и он не изменяется. Я понимаю, что ошибался вовремя; это не двойное, это просто отложено на несколько секунд. – yuttadhammo

+0

Я думаю, что это пример изменения документации, отражающей поведение. Я заметил, что OP описывает задолго до API 19. –

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