Android_WakeLock使用

版权声明:本文为博主原创文章,未经博主允许不得转载 https://blog.csdn.net/u013470102/article/details/89703951

1.前言与WakeLock简介

1.1.前言

一些手机app(如微信、QQ等)有新消息来到达,手机屏幕即使在锁屏状态下也会亮起,并提示用户有新消息。但是,一般情况下手机锁屏后,Android系统为了省电以及减少CPU消耗,在一段时间后会使系统进入休眠状态,这时,Android系统中CPU会保持在一个相对较低的功耗状态,而收到新消息必定有网络请求,而网络请求是消耗CPU的操作,那么如何在锁屏状态乃至系统进入休眠后,仍然保持系统的网络状态以及通过程序唤醒手机呢?答案就是Android中的WakeLock机制。

1.2. Wakelock 锁机制

应用程序可以通过申请 wakelock 锁的机制来对系统是否待机作出投票,当有任何一个应用申请了 wakelock 锁,待机时没有释放掉,系统是不会进入待机的,直到所有应用的 wakelock 锁都释放掉了,才会进入待机。

2.WakeLock使用

2.1.添加使用权限

    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <uses-permission android:name="android.permission.DEVICE_POWER" />

2.2.获取与释放锁

    
      private PowerManager.WakeLock wakeLock = null;
      private static final String mWakeLockName = "BackupService";
    /**
     * 获取电源锁,保持该服务在屏幕熄灭时仍然获取CPU时,保持运行
     */
    private synchronized void acquireWakeLock() {
        if (null == wakeLock) {
            PowerManager pm = (PowerManager) this.getSystemService(Context.POWER_SERVICE);
            wakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK
                    | PowerManager.ON_AFTER_RELEASE, mWakeLockName);
            if (null != wakeLock) {
                LogUtil.d(TAG, "acquireWakeLock!");
                wakeLock.acquire();
            }
        }
    }


    /**
     * 释放设备电源锁
     */
    private synchronized void releaseWakeLock() {
        if (null != wakeLock) {
            LogUtil.d(TAG, "releaseWakeLock!");
            wakeLock.release();
            wakeLock = null;
        }
    }

2.3.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:当锁被释放时,保持屏幕亮起一段时间

2.4 WakeLock注意事项

WakeLock的设置是 Activiy 级别的,不是针对整个Application应用的。所以application下有多个activity一定需要注意下!

3.潜在问题

之前公司手机查功耗这块,也是我们框架组负责的,导致功耗问题的原因非常多,其中包括一些应用WakeLock不释放,导致功耗不通过。所以获取与释放一定要配对使用,不然要么GG了,再不然估计就要被强杀策略强杀了。

猜你喜欢

转载自blog.csdn.net/u013470102/article/details/89703951