安卓wakelock机制
- 1.Wakelock作用
- 2.WakeLock锁分类
- 3.WakeLock的级别level
1.Wakelock作用
当手机灭屏状态下保持一段时间后,系统会进入休眠,这时,Android系统中CPU会保持在一个相对较低的功耗状态,一些后台运行的任务就可能得不到正常执行,比如网络下载中断,后台播放音乐暂停等。WakeLock正是为了解决这类问题,应用只要申请了WakeLock,那么在释放WakeLock之前,系统不会进入休眠,即使在灭屏的状态下,应用要执行的任务依旧不会被系统打断。
2.WakeLock锁分类
- 永久锁:永久锁表示只要获取了WakeLock锁,必须显式的进行释放,否则系统会一直持有该锁
- 超时锁:到达给定时间后,若没有显示释放锁,就会启动自动释放WakeLock锁
- 计数锁:如果一个WakeLock对象为计数锁,则一次accquire申请必须对应一次release释放
(–count == 0 )的时候解锁,同样当 (count == 0) 的时候才会去申请加锁 - 非计数锁:不管申请多少次,一次就可以释放该WakeLock
3.WakeLock的级别level
未弃用
- PARTIAL_WAKE_LOCK :保持CPU运转,但是键盘灯和屏幕可以关闭(屏幕和键盘灯不受该锁影响,可以正常熄灭不会导致该锁释放)
- PROXIMITY_SCREEN_OFF_WAKE_LOCK:当距离传感器检测到有物体(包括)靠近,会将屏幕熄灭;相反,当检测到物体远离后会点亮屏幕(应用场景在通话中比较常见)。上述锁不会影响终端的正常进入休眠状态,只有当前屏幕由该wakelock锁灭掉,才不会进入休眠状态
已弃用
- SCREEN_DIM_WAKE_LOCK:只限制屏幕,保证亮起,但是允许它亮度变低。
- SCREEN_BRIGHT_WAKE_LOCK:保证屏幕最高亮,但是键盘背光灯允许熄灭。
- FULL_WAKE_LOCK:保证屏幕最高亮度,并且键盘背光灯不允许熄灭。