【问题标题】:What is the definition of asleep for an android device?android 设备的 sleep 的定义是什么?
【发布时间】:2011-03-02 07:39:22
【问题描述】:

我正在使用

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

安排重复任务,该任务仅应在设备未处于睡眠状态时执行。据我了解,AlarmManager 上的 API 一旦设备从睡眠中唤醒,就会调用意图。

现在,Android 设备何时进入休眠状态?为了进行测试,我将持续时间设置为两分钟并将设备连接到我的机器。现在我正在看 logcat,每两分钟它就会吐出我的调试消息。

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

如何验证从什么时间不再执行命令以及 AlarmManager 文档中的 sleep 指的是什么?当设备开始休眠时,有没有办法从 logcat 输出中看到?

【问题讨论】:

    标签: android alarmmanager


    【解决方案1】:

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

    根据您设备上的 Android 版本,您可以在“设置”->“关于手机”->“电池使用”-> 中找到您的清醒时间图表,然后单击顶部的图表。 有关唤醒锁的更多信息,请访问http://developer.android.com/reference/android/os/PowerManager.html

    【讨论】:

      【解决方案2】:

      当没有运行应用程序阻止设备进入睡眠状态时,设备处于睡眠状态。所以: 1.屏幕关闭(当它打开时总是有一些正在运行的应用程序,例如Launcher) 2. 没有正在运行的服务(例如音乐、下载)- 没有 CPU 锁。

      AlarmManager 将设备从睡眠中唤醒,运行要运行的内容。这很关键,例如结束在广播接收器中创建的服务,让设备再次进入睡眠状态。如果您在后台做某事较长且重要,您应该为您的应用获取 CPU 锁,以防止它被 Android 操作系统杀死。

      “我如何验证命令不再执行的时间”到底是什么意思?什么命令?

      来自 JavaDoc:

      已注册的警报在保留时保留 设备处于睡眠状态(并且可以 如果他们选择唤醒设备 在那段时间内关闭),但会 如果它被关闭和清除 重新启动。

      因此操作系统会保留所有警报,设备可以被睡眠时发出的警报唤醒。重启后会删除警报(您应该将它们保存在数据库中并在重启后恢复它们)。

      “有没有办法从 logcat 输出中查看设备何时开始休眠?” 据我所知没有,我只能在屏幕熄灭时看到这样的东西:

      *** set_screen_state 0 来自“电源”标签

      恕我直言,您不必担心睡眠模式,只需通过在需要时处理屏幕关闭和打开意图 (Intent.ACTION_SCREEN_OFF) 来让您的应用成为“优秀的 Android 公民”,尽快完成服务,释放资源(网络、GPS、CPU)尽快,使用不准确的警报,下载管理器,以及操作系统带来的所有优秀员工。我相信 Android 会透明地处理 CPU 睡眠。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-09-15
        • 1970-01-01
        相关资源
        最近更新 更多