学而实习之 不亦乐乎

Android 中 WakeLock 休眠锁的使用

2023-07-24 07:04:17

一、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;
    }
}