Android 电源服务 ( PowerManager )

PowerManager(电源服务) ,用于管理 CPU 运行,键盘或屏幕亮起来

PowerManager

PowerManager 是 Android 系统为我们提供的电源管理的一个API,其相关接口与设备电池的续航能力有很大的关联

官方也说了,除非是迫不得已吧,不然的话,应该尽量避免使用这个类,并且使用完以后一定要及时释放

所谓的电源管理包括: CPU运行,键盘或者屏幕亮起来

核心其实就是 wakelock锁 机制,只要我们拿着这个锁,那么系统就无法进入休眠状态,可以给用户态程序或内核获取到。 锁可以是:" 有超时的 "或者 " 没有超时 ",超时的锁到时间后会自动解锁,如果没有了锁或超时,内核会启动休眠机制来进入休眠

WakeLock 锁介绍

PowerManager.WakeLock加锁解锁 两种状态,而加锁的形式有两种:

  1. 永久锁住

    这种锁除非显式的放开,否则是不会解锁的,所以用起来需要非常小心

  2. 超时锁

    到时间后就会解锁,而创建WakeLock后,有 两种加锁机制 :

    1. 不计数锁机制
    2. 计数锁机制(默认) 可通过 setReferenceCounted** (boolean value)来指定

    区别在于:

    前者无论 acquire ( )多少次,一次 release ( )就可以解开锁

    后者则需要 (--count == 0) 的时候,同样当 (count == 0) 才会去申请锁

    所以, WakeLock 的计数机制并不是正真意义上对每次请求进行申请/释放一个锁

    只是对同一把锁被 申请/释放 的次数来进行统计,然后再去操作

PowerManager 怎么用

PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
PowerManager.WakeLock w1 = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK, "MyTag");
w1.acquire();
//在这个过程,屏幕会保持光亮!
w1.release();

newWakeLock() 的第一个 flag 标记 ,这些标记不同程度的影响系统电源

这些标记都是独占的,并且每次只能指定其中一个

标记 说明
PARTIAL_WAKE_LOCK 保持 CPU 运转,屏幕和键盘灯有可能是关闭的
SCREEN_DIM_WAKE_LOCK 保持 CPU 运转,允许保持屏幕显示但有可能是灰的,允许关闭键盘灯
SCREEN_BRIGHT_WAKE_LOCK 保持 CPU 运转,允许保持屏幕高亮显示,允许关闭键盘灯
FULL_WAKE_LOCK 保持 CPU 运转,保持屏幕高亮显示,键盘灯也保持亮度

如果使用的是局部唤醒锁的话(使用 PARTIAL_WAKE_LOCK 标志),CPU 会继续运行, 将忽略任何的计时器,甚至按下电源按钮

其它的唤醒锁话,CPU 也会继续运转,但是使用者仍然可以按电源按钮让设备睡眠

另外,可以使用两个以上的标记,但是它只影响屏幕的行为

PARTIAL_WAKE_LOCK 同时使用的话,没有任何影响

屏幕解锁参数

  1. ACQUIRE_CAUSES_WAKEUP

    正常唤醒锁实际上并不打开照明

    相反,一旦打开它们会一直仍然保持。当获得 wakelock,这个标志会使屏幕或和键盘立即打开

    一个典型的使用就是可以立即看到那些对用户重要的通知

  2. ON_AFTER_RELEASE

    设置了这个标志,当 wakelock 释放时用户 activity 计时器会被重置,导致照明持续一段时间

    如果在 wacklock 条件中循环,这个可以用来降低闪烁

配置权限

要进行电源的操作需要在 AndroidManifest.xml 中声明该应用有设置电源管理的权限

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

注意: WakeLock 设置是 Activity 级别的,不是针对整个 Application 应用的

参考文档

  1. 官方 API 文档: PowerManager

Android 基础教程

关于   |   FAQ   |   我们的愿景   |   广告投放   |  博客

  简单教程,简单编程 - IT 入门首选站

Copyright © 2013-2022 简单教程 twle.cn All Rights Reserved.