我对AlarmManager
的行为感到困惑。 AlarmManager
始终保持CPU
锁定吗?在android开发者参考站点中他们说
只要报警,报警管理器就会保持CPU唤醒锁定 接收者的onReceive()方法正在执行
另一方面RTC_WAKEUP说
System.currentTimeMillis()中的闹钟时间(以UTC为单位的挂钟时间), 它将在设备关闭时唤醒设备
假设我的设备没有其他任务而不是我的。 CPU
完成工作后可以睡觉。那么下列情况会发生什么?
am.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), 1000 * 60 * 10, pi);
//pi is pendingIntent.
CPU go to sleep and wake up after 10 minutes. [I will acquire wake lock in intent class]
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);
答案 0 :(得分:1)
AlarmManager是否一直保持CPU锁定?
没有
那么下列情况会发生什么?
在您将呼叫发送到PendingIntent
后10分钟将调用setRepeating()
(API级别19+除外,在这种情况下,重复警报不准确,因此精确时间不确定)
AlarmManager在接下来的10秒内保持CPU。
没有。首先,你的闹钟是10分钟,而不是10秒。其次,CPU将被允许进入睡眠模式。一个不同的电路将安排在适当的时间唤醒它。
以下伪代码之间是否有任何区别
第一个将保持CPU开机10秒钟。
第二个将允许CPU进入睡眠模式,在约10分钟后再次唤醒(其中“〜”返回到我关于API等级19 +的评论)。