2014-02-18 3 views
1

Я смущенно о поведении AlarmManager. Делает ли AlarmManager держать замок CPU все время? В андроиде ЭТАЛ.ЗНАЧ сайте они сказалиПутаница о блокировке процессора AlarmManager в android

Менеджер Alarm удерживает блокировку бодрствования процессора до тех пор, как метод ТРЕВОГИ приемника OnReceive() выполняет

С другой стороны RTC_WAKEUP сказала, что

время сигнала в System.currentTimeMillis() (настенные часы время в UTC), который разбудит устройство, когда оно идет от

Предположим, что у моего устройства нет другой задачи вместо моей. CPU может заснуть после завершения моей работы. Тогда что будет в следующей ситуации?

am.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), 1000 * 60 * 10, pi); 
//pi is pendingIntent. 

Ситуация 1:

CPU go to sleep and wake up after 10 minutes. [I will acquire wake lock in intent class] 

Ситуация 2:

AlarmManager holds CPU for next 10 minutes. It's a repeating task, so AlarmManager holds the CPU all the time until it canceled. 

РЕДАКТИРОВАТЬ

Есть ли разница между следующими кодами псевдо

acquire_cpu_wakelock(); 
while(!canceled) 
{ 

    sleep(10); //minutes [update] 
    finish_task(); 

} 
release_cpu_wakelock(); 

и

am.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), 1000 * 60 * 10, pi); 
+1

Вам, вероятно, нужно более точно и буквально прочитать первое цитируемое утверждение: «в то время как приемник ** onReceive() ** приемника сигнала тревоги выполняет« - это не произойдет »до тех пор, пока« будильник »не загорится», и будет быть завершен, когда этот метод события возвращается. –

+0

Благодарим за быстрый ответ. Как насчет RTC_WAKEUP? – shantanu

+0

'до тех пор, пока метод onReceive() приемника сигнала тревоги выполняет во время исполнения' onReceive'. – njzk2

ответ

1

ли AlarmManager держать процессор заблокировать все время?

No.

Тогда что произойдет в следующей ситуации?

PendingIntent Ваш будет вызван размером 10 минут после того, как вы поместите вызов setRepeating() (за исключением уровня API 19+, в этом случае повторяющиеся сигналы являются неточными, и поэтому точные сроки неопределенна).

AlarmManager содержит процессор в течение следующих 10 секунд.

Нет. Во-первых, ваш сигнал тревоги составляет 10 минут, а не 10 секунд. Во-вторых, CPU будет разрешено перейти в спящий режим. Другая схема будет поддерживать пробуждение в нужное время.

Есть ли разница между следующими кодами псевды

Первым будет держать процессор включенный в течение 10 секунд.

Второй позволит процессору перейти в спящий режим, просыпаясь снова через ~ 10 минут (где «~» возвращается к моим комментариям об уровне API 19+).

+0

Спасибо. Это должно быть 10 минут, моя ошибка. Я обновил свой вопрос – shantanu

+0

Теперь мое приложение находится в верхнем положении в списке использования батареи. :(То, что я делаю, это триггер AlarmManager через каждые 1 минуту и ​​отправить пакет udp размером около 32-64 байт. – shantanu

+0

Подробности использования: CPU всего 5 м 30 секунд. ЦП: 3м 45 с. Пробуждение 32 м 41. Это нормально? ? – shantanu

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

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