我正在尝试识别用户在屏幕关闭时按下音量摇杆以更新活动。根据我的阅读,BroadcastReceivers(我认为)在手机处于睡眠状态时不起作用,因此唯一的方法是使用PARTIAL_WAKE_LOCK保持活动正常运行。我的应用程序是一个不应该使用太多电池的基本应用程序,但我担心使用PARTIAL_WAKE_LOCK可能会耗尽电池(这违背了在屏幕关闭时识别按钮按下的目的)。
PARTIAL_WAKE_LOCK实际上是基本应用的问题吗?如果是这样,那么最好的方法是什么,如果不是,那么使用PARTIAL_WAKE_LOCK的最佳方法是什么(即何时应该获取/释放它)?
提前致谢。
答案 0 :(得分:8)
这里有两个问题;我将专注于它的“WAKELOCK”部分。
唤醒锁以通过移动设备的电池搅拌而臭名昭着。了解设备将使屏幕变暗,然后在关闭CPU并进入“睡眠”模式之前关闭屏幕。这对您的手机来说是非常重要的一步,因为它可以节省电量。
唤醒锁是非常危险的,因为在你完成时忘记释放锁是太容易了。
一般情况下,在尝试睡觉时,不要试图让设备保持清醒;当你正在吃电池时,这会激怒你的用户。
以下是一些可能以更好的方式处理唤醒锁的技巧:
1)如果用户停靠/充电,则仅允许此操作
2)使用接受超时参数的WakeLock.aquire(..)版本。这样,您可以唤醒,检查某些状态,然后在没有任何事情发生时自动返回睡眠状态。 (见http://goo.gl/FkrO8)
3)使用AlarmManager创建不准确的计时器;这将允许您的应用程序在其他应用程序唤醒工作时被唤醒。
4)使用JobScheduler API(在L中发布),它允许您从单个API处理此类调度和工作延迟。 (见http://goo.gl/Z1AqSn)
答案 1 :(得分:0)
这几乎是不可能的,因为这是在窗口管理器层处理的。有关从操作系统方面启用它的示例,请参阅此修补程序。它需要修改您无法作为第三方开发人员访问的内容。另外,你必须拿着唤醒锁。您将看到提交中有关停靠/收费的提及,它也会处理它。