4

当屏幕关闭以更新活动时,我试图识别用户何时按下音量键。根据我的阅读,BroadcastReceivers(我认为)在手机处于睡眠状态时不起作用,因此唯一的方法是使用 PARTIAL_WAKE_LOCK 保持活动运行。我的应用程序是一个基本的应用程序,不应该使用太多电池,但我担心使用 PARTIAL_WAKE_LOCK 可能会耗尽电池(这违背了在屏幕关闭时识别按钮按下的目的)。

PARTIAL_WAKE_LOCK 实际上会成为基本应用程序的问题吗?如果是这样,这样做的最佳方法是什么,如果不是,使用 PARTIAL_WAKE_LOCK 的最佳方法是什么(即我应该何时获取/释放它)?

提前致谢。

4

2 回答 2

8

这里有两个问题;我将专注于它的“WAKELOCK”部分。

唤醒锁因使用移动设备的电池而臭名昭著。了解设备会使屏幕变暗,然后在关闭 CPU 并进入“睡眠”模式之前关闭屏幕。这对您的手机来说是极其重要的一步,因为它可以节省电池电量。

唤醒锁是极其危险的,因为完成后很容易忘记释放锁。

一般而言,您不应该在设备尝试睡眠时尝试保持其处于唤醒状态。当您耗尽他们的电池时,这会激怒您的用户。

以下是一些可能以更好的方式处理唤醒锁的提示:

1) 仅当用户已对接/充电时才允许此操作

2) 使用接受超时参数的 WakeLock.aquire(..) 版本。这样,您可以醒来,检查某些状态,然后如果没有发生任何事情,则自动重新进入睡眠状态。(见http://goo.gl/FkrO8

3)使用AlarmManager创建不精确的定时器;这将允许您的应用程序在其他应用程序也被唤醒以进行工作时被唤醒。

4) 使用 JobScheduler API(在 L 中发布),它允许您从单个 API 处理这种类型的调度和工作延迟。(见http://goo.gl/Z1AqSn

于 2014-12-06T14:25:08.607 回答
0

这几乎是不可能的,因为这是在窗口管理器层处理的。有关从操作系统方面启用它的示例,请参阅此补丁。它需要修改您作为第三方开发人员无权访问的内容。否则,您将不得不持有唤醒锁。您将在处理该问题的提交中看到有关停靠/收费的内容。

http://review.cyanogenmod.org/#/c/80351/

于 2014-12-07T06:16:31.257 回答