关于Android中AlarmManager的CPU锁定的困惑

时间:2014-02-18 20:09:49

标签: android alarmmanager wakelock

我对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.

情况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 个答案:

答案 0 :(得分:1)

  

AlarmManager是否一直保持CPU锁定?

没有

  

那么下列情况会发生什么?

在您将呼叫发送到PendingIntent后10分钟将调用setRepeating()(API级别19+除外,在这种情况下,重复警报不准确,因此精确时间不确定)

  

AlarmManager在接下来的10秒内保持CPU。

没有。首先,你的闹钟是10分钟,而不是10秒。其次,CPU将被允许进入睡眠模式。一个不同的电路将安排在适当的时间唤醒它。

  

以下伪代码之间是否有任何区别

第一个将保持CPU开机10秒钟。

第二个将允许CPU进入睡眠模式,在约10分钟后再次唤醒(其中“〜”返回到我关于API等级19 +的评论)。