【发布时间】:2013-05-20 14:01:03
【问题描述】:
谁能描述或指出一个很好的描述“android 中的唤醒锁是如何工作的”?你可以忘记它的 Android 标准文档。
我有一个服务(作为前台启动)并且在该服务中将启动一个自己的线程。线程保持循环,直到用户停止服务。在循环中,线程执行 HTTP 请求。从响应中线程知道应该在什么延迟(1 分钟或更长)之后执行下一个 HTTP 请求。
当显示器打开时,HTTP 请求会在准确的预期时间到达服务器。但是当显示器关闭时,延迟是随机的。例如。如果是 1 分钟,实际上是 2:21, 4:04, 4:40, ... 但是,我想要确切的时间以防显示器关闭(假设称为深度睡眠模式)。
所以我在 HTTP 请求之前和之后引入了 wakelock.acquire() 和 wakelock.release,但这并没有改变。
但它给我的只是一般性问题:
当手机休眠时,我的代码怎么会醒来执行wakelock.acquire()?如果我到达wakelock.acquire(),那我就不需要了,还是……?
好吧,然后我想,也许在深度睡眠中我的代码也被执行了,但某些事情,比如 IP 流量不是。但它应该可以工作。
从 logcat 日志中我可以看到 wakelock.acquire() 没有被及时调用。那么它的用途是什么?我无法在启动服务或其线程时执行wakelock.acquire(),因为这意味着即使我只想在 30 分钟内发出 HTTP 请求,我的服务也会阻止手机进入睡眠状态。
我不敢相信,使用wakelock.acquire(),您只能在其整个生命周期内提供服务,从而防止手机进入深度睡眠状态。
【问题讨论】:
-
嘿,也许我完全错了,使用唤醒锁我只能阻止手机进入深度睡眠,但我无法将手机从深度睡眠中唤醒。但这不是正常情况,您需要唤醒手机一段时间才能做某事吗???另一个问题是,为什么在深度睡眠中执行 http 请求。我的服务是否需要一些处理时间,因为其他一些应用程序唤醒了手机?但是这个应用程序是如何做到的。我希望它也这样做。
标签: android multithreading service foreground wakelock