9

我知道android使用唤醒锁来保持cpu运行或屏幕开启。很明显,屏幕唤醒锁可防止用户活动计时器在用户一段时间不活动后关闭屏幕。

但我想知道cpu唤醒锁究竟什么时候会生效。

1.如果我创建一个新线程并在没有任何唤醒锁定的情况下在后台持续消耗cpu,关闭屏幕不会停止它。它会停止,什么时候停止?

2. Timer.schedule() 调度的线程怎么样?

3.它会导致另一个问题,如果我在服务中保持一个长套接字连接,它在 socket.read() 处被阻塞。当套接字从远程接收任何数据时,我是否必须获取唤醒锁以确保服务将被唤醒?

谢谢。

4

2 回答 2

8

回答您所有的子问题

  1. 当没有唤醒锁处于活动状态时,Android 会休眠。不管什么进程和线程正在运行,它仍然会休眠。这意味着如果您的线程或其他一些进程没有激活唤醒锁,您的线程将不会执行,因此不会耗尽任何电池。只有当某个其他进程获得唤醒锁时,该线程才会被激活。

  2. 同样适用于 Timer.schedule()。假设您编写了一个每秒执行一次但没有任何唤醒锁的计时器,并说 android 进入睡眠状态 10 秒。当它在第 11 秒唤醒 p 时,它将识别出您的计时器已过期 10 次,它将简单地丢弃这 9 个实例并仅执行一次。如果您想要非常可靠的计时器,则必须获得唤醒锁或用户 AlarmTimer。

  3. 是的。

于 2012-02-17T16:37:21.097 回答
0

我从与唤醒锁定相关的不同功能中学到了什么,Android 系统永远不会休眠,如果它休眠你将不会收到短信,呼叫即 Android 在休眠时不会只运行操作系统级别的任务。
唤醒锁定是一种机制,任何应用程序都可以请求系统让设备为他保持开启状态。尽管用户尚未启动该应用程序,应用程序仍可以在后台执行操作。

对于 1 和 2,Akshar 已正确解释。3. 当系统处于睡眠状态时(只有操作系统级别的任务正在运行),在您的应用程序中执行任何操作,您首先必须向系统请求唤醒锁,然后只有应用程序才能运行它的操作。完成操作后,您应该释放唤醒锁,以便系统可以转移到管理操作系统级别的任务。

于 2014-12-31T09:26:27.353 回答