Android系统为我们提供了电源管理的一个API,其相关接口与设备电池的续航能力有很大的关联。官方文档中讲,除非迫不得已,应该尽量避免使用这个类,并且使用完以后一定要及时释放。
所谓的电源管理包括:CPU运行、键盘亮、屏幕亮。其核心就是wakelock锁机制,只要我们拿到这个锁,那么系统就无法进入到休眠状态,可以给用户态程序或内核获取到。锁可以是:“有超时的”和“无超时的”。超时的锁到时间后会自动解锁,如果没有了锁,或者超时,内核会启动休眠机制来进入休眠。
WakeLock的等级
下面是WakeLock的四个功能等级,覆盖了对系统电源的所有影响。这些功能都是互斥的,你只能使用它们中的某一项。
Flag Value | CPU | Screen | Keyboard | 电源键影响 | 应用情景 | 备注 |
---|---|---|---|---|---|---|
PARTIAL_WAKE_LOCK | On* | Off | Off | 不受 | 听音乐,后台下载等 | 使用PARTIAL_WAKE_LOCK锁,CPU会一直保持运行状态,即使屏幕展示时间超时,甚至用户手动点击电源按钮锁屏也无法改变CPU运行状态 |
SCREEN_DIM_WAKE_LOCK | On | Dim | Off | 受 | 即将进入灭屏休眠状态时 | |
SCREEN_BRIGHT_WAKE_LOCK | On | Bright | Off | 受 | 看电子书,看视频,操纵屏幕没有操作键盘等 | |
FULL_WAKE_LOCK | On | Bright | Bright | 受 | 来电话,闹钟触发等 | 用户按下电源键,FULL_WAKE_LOCK锁将被系统直接释放掉,屏幕和CPU都进入休眠状态 |
PROXIMITY_SCREEN_OFF_WAKE_LOCK | Off | Bright/Off | Off | 受 | 打电话靠近或远离手机时 | 需要设备支持距离传感器,不能和ACQUIRE_CAUSE_WAKEUP一起使用 |
DOZE_WAKE_LOCK | Off | Off | Off | 受 | 低电状态,doze模式下,允许CPU进入suspend状态 | 系统支持doze |
DRAW_WAKE_LOCK | On | Off | Off | 不受 | 保持设备唤醒,能正常运行绘图 | windowManager允许应用在dozing状态下绘制屏幕 |
备注:
1.可以增加两个只会影响屏幕状态的标志。这两个标志和PARTIAL_WAKE_LOCK结合使用没有任何反应
Flag Value | Description |
---|---|
ACQUIRE_CAUSE_WAKEUP | 正常情况下,锁并不会打开屏幕照明功能,事实上,它们只是在屏幕被点亮时让它保持照明功能,但如果你使用这个标签,当你获得锁时,会立刻将屏幕和键盘状态打开。一个传统的使用该功能就是在需要用户立马看到屏幕和键盘的通知时使用这个标签 |
ON_AFTER_RELEASE | 如果这个标签被使用,activity计时器会在锁被释放的时候重置,使得屏幕照明时间延长。这个标签可以用来当你在各种锁状态切换过程中减少闪烁 |
2.任何使用WakeLock的程序,都需要在应用的AndroidManifest.xml里面声明权限
<uses-permission android:name="android.permission.WAKE_LOCK"></uses-permission>
3.使用方法

网友评论