WakeLock(休眠锁)
WakeLock用于保持设备的唤醒状态,有些情况下,即时用户不操作App,我们也需要保持屏幕处于唤醒状态,以保证用户体验,比如视频类APP和计步类APP,视频类APP需要屏幕一直保持常量,计步类APP要求熄屏后程序依然保持运行状态。
WakeLock的多种类型:
- PARTIAL_WAKE_LOCK:保持CPU正常运转,但屏幕和键盘灯都可能是关闭的。
- SCREEN_DIM_WAKE_LOCK:保持CPU正常运转,允许屏幕点亮但可能屏幕被置灰,键盘灯可能是关闭的。
- SCREEN_BRIGHT_WAKE_LOCK:保持CPU正常运转,允许屏幕高亮显示,键盘灯可能是关闭的。
- FULL_WAKE_LOCK:保持CPU正常运转,保持屏幕高亮显示,键盘灯也保持亮度。
- ACQUIRE_CAUSES_WAKEUP:强制屏幕和键盘灯亮起,这种锁针对一些必须通知用户的操作。
- ON_AFTER_RELEASE:当WakeLock被释放后,继续保持屏幕和键盘灯亮起一段时间。
WakeLock使用注意事项
使用WakeLock时一定要及时释放锁,因为如果未释放锁导致屏幕常亮会非常耗电,像视频类APP我们需要在暂停时就释放掉锁,而不是等到停止播放或销毁Activity时才释放锁。
WakeLock使用方法:
private PowerManager.WakeLock mWakeLock = null;
/**
* 获取唤醒锁
*/
private void acquireWakeLock()
{
if(mWakeLock == null)
{
PowerManager mPM = (PowerManager) this.getSystemService(Context.POWER_SERVICE);
mWakeLock = mPM.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK|
PowerManager.ON_AFTER_RELEASE,"PlayService");
if(mWakeLock!=null)
{
mWakeLock.acquire();
}
}
}
/**
* 释放锁
*/
private void releaseWakeLock()
{
if(mWakeLock!=null)
{
mWakeLock.release();
mWakeLock = null;
}
}