为了延长电池使用寿命,Android设备会在闲置一段时间后使屏幕变暗,然后关闭屏幕显示,最后停止CPU。WakeLock是一个电源管理系统服务功能,应用程序可以使用它来控制主机设备的电源状态。WakeLock可以用来保持CPU运行,避免屏幕变暗和关闭,以及避免键盘背光灯熄灭。创建和使用WakeLock会对设备的电池电量消耗产生显著的影响。因此,最好只在确实有必要使用WakeLock,并且使用它们的时间越少越好,只要有可能就释放它们。
因为WakeLock会显著影响电池寿命,所以在创建它们之前,应用程序需要请求一个WAKE_LOCK权限。
<uses-permission android:name="android.permission.WAKE_LOCK" />
为创建一个Wake Lock,需要调用PowerManager的newWakeLock方法,并指定下面的一种Wake Lock类型。
-
FULL_WAKE_LOCK 保持屏幕最大亮度、键盘背光灯点亮以及CPU运行。
-
SCREEN_BRIGHT_WAKE_LOCK 保持屏幕最大亮度和CPU运行。
-
SCREEN_DIM_WAKE_LOCK 保持屏幕亮起(但是变暗)和CPU运行。
-
PARTIAL_WAKE_LOCK 保持CPU运行。
SCREEN_DIM_WAKE_LOCK通常用于在用户观看屏幕但很少与屏幕进行交互期间(例如,播放视频)防止屏幕变暗。
PARTIAL_WAKE_LOCK(也叫CPU Wake Lock)用于防止设备在操作完成前进入休眠状态。当Service从Intent Receiver内启动时常常出现这种情况,因为Intent Receiver可能在设备休眠期间接收Intent。值得注意的是,在这种情况下,系统将在Broadcast Receiver的整个onReceive处理程序中使用CPU Wake Lock。
如果在broadcast receiver的onreceive处理程序中启动一个service或广播一个intent,那么有可能在service启动或者收到intent以前,所使用的wake lock就会被释放。为了确保service能够完成执行,需要放置一个独立的wake lock策略。
创建Wake Lock后,可以通过调用acquire来获取它。可以有选择地指定一个超时值来确保将在尽可能长的时间内保持使用Wake Lock。当为某个动作使用Wake Lock,而该动作完成
时,需要调用release来让系统管理电源状态。
//获取Wake Lock
PowerManager pm = (PowerManager)getSystemService(Context.POWER_SERVICE);
WakeLock wakeLock = pm.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK, "MyWakeLock");
wakeLock.acquire();
//释放Wake Lock
wakeLock.release();