WakeLock
Android 系统本身为了优化电量的使用,会在没有操作时进入休眠状态,来节省电量。当然,为了便于开发(很多应用不可避免的希望在灭屏后还能运行一些事儿,或是要保持屏幕一直亮着--比如播放视频),Android 提供了一个 PowerManager.WakeLock 的东西.
我们可以用 WakeLock 来保持 CPU 运行,或是防止屏幕变暗/关闭,让手机可以在用户不操作时依然可以做一些事儿。然而,获取 WakeLock 很容易,释放不好就会成为难题,消耗电量。例如获取了一个 WakeLock 来保持 CPU 运转,做一个复杂运算并将数据上传到后台服务器,然后释放该 WakeLock。然而这个过程可能并不像我们想象的那么快,可能因为比如服务器挂掉,计算出了异常等等导致 WakeLock 没有释放,CPU 会一直得不到休眠,而大大增加耗电。
另外,WakeLock 还有 android:keepScreenOn 属性,还可以让屏幕常量,这也是耗电大户。
private void acquireWakeLock(Context ctx) {
if (null == mWakeLock) {
PowerManager pm = (PowerManager) ctx.getSystemService(Context.POWER_SERVICE);
mWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK|PowerManager.ON_AFTER_RELEASE, "TestLocknService");
if (null != mWakeLock) {
mWakeLock. acquire();
}
}
}
PARTIAL_WAKE_LOCK:保持 CPU 正常运转,屏幕和键盘灯有可能 会关闭。
SCREEN_DIM_WAKE_LOCK:保持 CPU 运转,允许保持屏幕显示,但有可能变暗,允许关闭键盘灯。
SCREEN_BRIGHT_WAKE_LOCK:保持 CPU 运转,允许保持屏幕高亮显示,允许关闭键盘灯。
FULL_WAKE_LOCK:保持 CPU 运转,保持屏幕高亮显示,键盘灯也保持亮度。
ACQUIRE_CAUSES_ WAKEUP:强制使屏幕亮起,这种锁主要用于一些必须通知用户的操作。
ON_AFTER_RELEASE:当锁被释放时,保持屏幕亮起一段时间。
需要注册权限