前台服务与 PARTIAL_WAKE_LOCK 的关系

Posted

技术标签:

【中文标题】前台服务与 PARTIAL_WAKE_LOCK 的关系【英文标题】:Relation between Foreground Services and PARTIAL_WAKE_LOCK 【发布时间】:2012-04-09 16:51:19 【问题描述】:

我知道前台服务有“不可能杀死”的行为。根据 android 文档:

服务在理论上还是有可能被杀死 来自当前前台应用程序的极端内存压力,但是 实际上,这不应该是一个问题。

我认为这解决了大多数情况下内存不足的问题。但是我找不到任何关于在前台服务运行时 CPU 是否进入睡眠状态的文档。

    前台服务是自动获取 PARTIAL_WAKE_LOCK 还是必须在需要时显式调用它?

    有没有办法检查/记录哪些应用程序/服务正在使用 PARTIAL_WAKE_LOCK?

【问题讨论】:

【参考方案1】:

Android 前台服务和PARTIAL_WAKE_LOCK没有任何关系。

前台服务 -> 它告诉操作系统将您的服务放在最高优先级队列中。如果操作系统出于任何原因需要内存,它会在 LAST 终止您的服务,它会从最低优先级的队列开始(我相信有 5 个优先级队列,前景是最高的)。

PARTIAL_WAKE_LOCK -> 它告诉操作系统在设备进入睡眠状态时不要让 CPU 进入睡眠状态(只要发生这种情况)。

因此,即使您有前台服务,如果设备进入睡眠状态,cpu 也可能进入睡眠状态(如果其他应用程序获得了 PARTIAL_WAKE_LOCK,则可能不会)。 我认为没有办法以编程方式检查哪些应用程序获得了唤醒锁,但您可以将设备插入 DDMS,当有人获得唤醒锁时,您会看到 PowerManager 日志。

希望对你有帮助!

【讨论】:

以上是关于前台服务与 PARTIAL_WAKE_LOCK 的关系的主要内容,如果未能解决你的问题,请参考以下文章

Android VoIP 应用程序:PARTIAL_WAKE_LOCK 与忽略电池优化(打瞌睡白名单)

为啥持有 PARTIAL_WAKE_LOCK 会导致随机系统崩溃?

Service学习笔记03- 前台服务实战

Service学习笔记03- 前台服务实战

与前台服务android通信

Service学习笔记03- 前台服务实战