您的位置:首页 > 移动开发 > Android开发

Android的WakeLock机制

2016-04-06 16:25 323 查看
手机功耗本质是硬件工作的消耗,手机主要功耗硬件如下:CPU GPU soc Vedio 和外设。内存本身是不耗电的,只是作为程序的临时住所;

Wake Lock 是Android提供给开发者的一个方法,主要的作用是对关键进程进行强制性的运行,正常情况下手机灭屏了就不使用了,硬件应该也就停止工作了,单总有例外,如音乐、短信接收等;所以Android系统提供Wake Lock机制,提供了Wake Lock的API,使得应用程序有权限通过代码阻止AP进入休眠状态,这种开放性导致流氓软件 ,

即使手机灭屏,程序仍然会在后台运行占用资源,对功耗和手机性能产生影响。

WakeLock:

PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE); WakeLock sCpuWakeLock = pm.newWakeLock(
PowerManager.FULL_WAKE_LOCK |
PowerManager.ACQUIRE_CAUSES_WAKEUP,"okTag");
if (sCpuWakeLock!= null) {
sCpuWakeLock.release();
sCpuWakeLock = null;
}


PARTIAL_WAKE_LOCK:保持CPU 运转,屏幕和键盘灯有可能是关闭的。

SCREEN_DIM_WAKE_LOCK:保持CPU 运转,允许保持屏幕显示但有可能是灰的,允许关闭键盘灯

SCREEN_BRIGHT_WAKE_LOCK:保持CPU 运转,保持屏幕高亮显示,允许关闭键盘灯

FULL_WAKE_LOCK:保持CPU 运转,保持屏幕高亮显示,键盘灯也保持亮度

ACQUIRE_CAUSES_WAKEUP:不会唤醒设备,强制屏幕马上高亮显示,键盘灯开启。有一个例外,如果有notification弹出的话,会唤醒设备。

ON_AFTER_RELEASE:WakeLock 被释放后,维持屏幕亮度一小段时间,减少WakeLock 循环时的闪烁情况

如果申请了partial wakelock,那么即使按Power键,系统也不会进Sleep,如Music播放时 如果申请了其它的wakelocks,按Power键,系统还是会进Sleep

但如果不领会Android设计者的意图而滥用Wake Lock API,为了自身程序在后台的正常工作而长时间阻止AP进入休眠状态,就会成为待机电池杀手。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android WakeLock