什么是Android设备睡着的定义?

我在用着

alarmManager.setInexactRepeating(AlarmManager.ELAPSED_REALTIME, 0, DURATION, broadcast); 

要安排一个重复的任务,只有在设备没有睡着的时候才能执行。 根据我对AlarmManager的API的理解,一旦设备从睡眠中醒来,就会调用这个intent。

现在什么时候Android设备睡着了? 为了testing,我将持续时间设置为两分钟,并将设备连接到我的机器。 现在我正在看logcat,每隔两分钟它就会吐出我的debugging信息。

我一直以为停用的屏幕意味着设备开始睡觉。 或者是我看着debugging输出防止设备睡觉? 我还断开了USB连接,并在半小时后查看了日志,即使显示器已经黑暗了15分钟以上,我仍然可以看到对计时器代码的调用。

我怎样才能确认命令不再被执行,以及AlarmManager文档中的睡眠状态是指什么? 当设备开始睡眠时,有没有办法从logcat输出中看到?

Solutions Collecting From Web of "什么是Android设备睡着的定义?"

当没有正在运行的应用程序阻止它睡觉时,设备处于睡眠状态。 所以:1.屏幕closures(虽然它总是有一些正在运行的应用程序,例如Launcher)2.没有正在运行的服务(如音乐,下载) – 没有CPU锁。

AlarmManager从睡眠中唤醒设备,运行要运行的内容。 例如,结束在广播接收器中创build的服务以防止闹钟再次入睡。 如果你在后台做的更长,重要,你应该获得你的应用程序的CPUlocking,以防止被Android操作系统杀死。

你到底是什么意思呢?我怎样才能确认命令不再被执行? 什么命令?

从JavaDoc:

注册的警报在设备处于睡眠状态时保留(如果在此期间closures设备,可以select将设备唤醒),但是如果closures并重新启动,则会被清除。

所以OS保持所有报警,设备可以在睡眠时被唤醒。 警报在重新启动后被丢弃(您应该将它们保存在数据库中并在重新启动后恢复)。

当设备开始睡眠时,有没有办法从logcat输出中看到? 据我所知没有,当屏幕熄灭时,我只能看到这样的事情:

*** set_screen_state 0来自“power”标签的*** set_screen_state 0

恕我直言,你不应该打扰睡眠模式,通过处理屏幕和意图(Intent.ACTION_SCREEN_OFF),如果需要,尽快完成服务,释放资源(networking,GPS,CPU),使您的应用程序“良好的Android公民”不精确的警报,下载pipe理器,以及操作系统带来的所有优秀员工。 我相信,Android处理CPU睡眠透明。

屏幕closures,不一定表示睡觉的设备。 应用程序可以请求唤醒锁,以在屏幕closures时保持设备的唤醒状态。 如果另一个应用程序有一个不使用不精确重复的计时器,那么该设备也会唤醒。

根据设备上的Android版本,您可以在设置 – >关于手机 – >电池使用 – >然后单击上方的图表上find您的清醒时间图表。 有关唤醒锁的更多信息可以在http://developer.android.com/reference/android/os/PowerManager.htmlfind。