安卓设备的睡眠模式是什么意思?

10

我正在使用

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

如何安排一个重复执行的任务,仅在设备未进入睡眠状态时执行。根据我对 AlarmManager 上的 API 的理解,当设备从睡眠状态醒来时,意图将被调用一次。

那么,Android 设备何时处于睡眠状态?为了测试,我将持续时间设置为两分钟,并将设备连接到我的电脑上。现在,我正在观察 logcat,并且每两分钟它就会输出我的调试消息。

我一直认为,关闭屏幕意味着设备开始进入睡眠状态。或者是我在查看调试输出时防止了设备进入睡眠状态吗?我还断开了 USB 连接,并在半小时后查看了日志,即使显示器暗了超过 15 分钟,我也可以看到对我的计时器代码的调用。

我该如何验证命令不再执行的时间以及 AlarmManager 文档中的睡眠状态指的是什么?是否有一种方法可以从 logcat 输出中查看设备何时开始进入睡眠状态?

2个回答

8
一个关闭的屏幕并不一定意味着设备处于休眠状态。应用程序可以请求唤醒锁定,使设备在关闭屏幕时保持唤醒状态。如果另一个应用程序具有不使用不精确重复的计时器,则设备也会为其唤醒。
根据您设备上的Android版本,您可以在“设置”->“关于手机”->“电池使用情况”->然后点击顶部的图表中找到您的唤醒时间表。
更多有关唤醒锁定的信息可在此找到:http://developer.android.com/reference/android/os/PowerManager.html

7
设备进入休眠状态时,没有运行的应用程序会阻止它进入睡眠状态。因此: 1. 屏幕关闭(当屏幕打开时,总是有一些正在运行的应用程序,例如Launcher) 2. 没有正在运行的服务(例如音乐、下载)- 没有CPU锁。
AlarmManager会从睡眠状态中唤醒设备,并运行需要运行的内容。这很关键,例如结束在广播接收器中创建的服务,以便让设备再次进入睡眠状态。如果您在后台执行更长时间和重要的操作,则应获取CPU锁定以防止Android操作系统将其杀死。
您所说的“如何验证从哪个时间开始命令不再执行”是指哪个命令?
从JavaDoc中可以看到:
注册的闹钟在设备进入睡眠状态时保留(如果它们在此期间触发,可以选择唤醒设备),但如果关闭并重新启动,则会被清除。
因此,操作系统保留所有闹钟,设备可能会因为闹钟而被唤醒。闹钟在重新启动后被删除(您应该将它们保存在数据库中,并在重新启动后恢复它们)。
“是否有一种方法可以从logcat输出中查看设备何时开始睡眠?” 据我所知,没有,我只能在屏幕关闭时看到类似于以下内容:
*** set_screen_state 0
我认为您不应该担心睡眠模式,只需使您的应用程序成为“好的Android公民”,通过处理屏幕开启和关闭意图(Intent.ACTION_SCREEN_OFF)(如果需要),尽快完成服务、释放资源(网络、GPS、CPU),使用不精确闹钟、下载管理器以及操作系统提供的所有好的工具。我相信Android会透明地处理CPU睡眠。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接