http://blog.sina.com.cn/s/blog_4ad7c2540101n2k2.html

项目中数据传输时因为手机休眠而罢工了,这里简单了解了一下电源锁。

android之WakeLock机制浅析

(

应用程序耗电的实质,是所启用的硬件在消耗电量。  
手机的耗电单元 
CPU: 应用处理器(Application Processor)和基带处理器(Base Band)

Soc(系统级芯片): GPU(图形处理单元),

Video Codec等 外设:wifi,BT, GPS,LCD等  
耗电情况: 
应用处理器(Application Processor) 40~60mA

GPU开启时会大于100mA

基带处理器(Base Band)3~5mA

通话时100~200mA

LCD  100mA

Wifi   100mA 
BT    60mA

AP是ARM架构的处理器,用于运行Linux+Android系统;

BP用于运行实时操作系统(RTOS),通讯协议栈运 行于BP的RTOS之上

非通话时间,BP的能耗基本上在5mA左右,而AP只要处于非休眠状态,能耗至少在50mA以上,执行图形运算时会更高。另外 LCD工作时功耗在100mA左右,WIFI也在100mA左右。

一般手机待机时,AP、LCD、WIFI均进入休眠状态,这时Android中应用程序的代码也会停止执行,只会有基带处理器(Base Band)的耗电。 
 
摩托罗拉的里程碑手机为例,官方的参数如下:

锂电池(1400mAh)  通话时间450分钟   待机时间420小时 
 
也就是说,通话时1400/(450/60) = 186.67mA

待机时 1400/420 = 3.33mA  
省电的原则:按需并按最低标准使用硬件

WakeLock机制:

Android为了确保应用程序中关键代码的正确执行,提供了Wake Lock的API,使得应用程序有权限通过代码阻止AP进入休眠状态。 
WakeLock阻止应用处理器(Application Processor)挂起,确保关键代码的运行,通过中断唤起应用处理器(Application Processor),可以阻止屏幕变暗。所有的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进入休眠状态,就会成为待机电池杀手。

Alarm Manager 
AlarmManage有一个AlarmManagerService,该服务程序主要维护app注册下来的各类Alarm,并且一直监听Alarm设备,一旦有Alarm触发,或者是Alarm事件发生,AlarmManagerService就会遍历Alarm列表,找到相应的注册Alarm并发出广播

Alarm Manager会维持一个cpu的wake lock。这样能保证电话休眠时,也能处理alarm的广播。一旦alarm receiver的onReceive() 方法执行完,wake lock会迅速被释放。如果在receiver中开启一个service,有可能service还没启动,wake lock已经被释放了。所以此时要实现单独的wake lock策略。

有4种Alarm类型: 
1)RTC_WAKEUP 
在指定的时刻(设置Alarm的时候),唤醒设备来触发Intent。

2)RTC 
在一个显式的时间触发Intent,但不唤醒设备。   
3)ELAPSED_REALTIME 
从设备启动后,如果流逝的时间达到总时间,那么触发Intent,但不唤醒设备。流逝的时间包括设备睡眠的任何时间。注意一点的是,时间流逝的计算点是自从它最后一次启动算起。   
4)ELAPSED_REALTIME_WAKEUP 
从设备启动后,达到流逝的总时间后,如果需要将唤醒设备并触发Intent。

关于电源锁:android之WakeLock机制浅析相关推荐

  1. Android事件分发机制浅析

    文章目录 前言 一.MotionEvent 二.事件分发 1.代码模型 2.代码分析 0x00.Activity 0x01.ViewGroup 1.是否分发事件 2.事件分发前清除标记 关于Touch ...

  2. Android的WakeLock机制

    WakeLock原理和手机耗电: 手机功耗本质是硬件工作的消耗,手机主要功耗硬件如下:CPU GPU  soc Vedio 和外设.内存本身是不耗电的,只是作为程序的临时住所:           W ...

  3. Android的消息处理机制——Looper,Handler和Message浅析

    题外话: 说来有些惭愧,对于这三者的初步认识居然是在背面试题的时候.那个时候自己接触Android的时间还不长,学习的书籍也就是比较适合入门的<疯狂Android讲义>,当然在学到Hand ...

  4. Android wakelock机制

    Android wakelock机制 Wake Lock是一种锁的机制, 只要有人拿着这个锁,系统就无法进入休眠,可以被用户态程序和内核获得. 这个锁可以是有超时的或者是没有超时的,超时的锁会在时间过 ...

  5. Android 8.1 PowerManagerService分析(三)——WakeLock机制

    欢迎大家关注我的掘金帐号 我会在那里定期更新最新版本的Android Framework源码模块分析~~ 在Android 8.1 PowerManagerService分析(一)中,主要分析了PMS ...

  6. Android睡眠唤醒机制--Kernel态

    Android睡眠唤醒机制--Kernel态 转载 2014年08月26日 14:31:41 标签: android / hibernate 193 一.简介 Android系统中定义了几种低功耗状态 ...

  7. Android FrameWork——Binder机制详解(1)

    1.前面我曾经发表过一篇blog介绍了aidl实现机制(aidl实现机制浅析),不过那只是停留在java表层,并遗留了一个问题,那就是BinderProxy.transact 该方法本地化实现,同时我 ...

  8. Smack核心机制浅析

    Smack核心机制浅析 在以上几篇博客中,我已经阐述了有关Smack技术的一些知识和要点,但是没有把Smack最精华的部分展示出来,由于本人学疏才浅,在阐述的过程中不免有这样那样的问题和诟病,但本人还 ...

  9. H5缓存机制浅析-移动端Web加载性能优化【干货】

    转载:H5缓存机制浅析-移动端Web加载性能优化[干货] 作者:贺辉超,腾讯游戏平台与社区产品部 高级工程师 目录 1 H5缓存机制介绍 2 H5缓存机制原理分析 2.1 浏览器缓存机制 2.2 Do ...

最新文章

  1. C# 获取一些简单的本机信息
  2. 思科高级路由与交换(CISCO 部分) 第5天
  3. 【[CQOI2018]交错序列】
  4. C语言 读取文件内容
  5. 智能机器人比巴和智伴哪个好_扫地机器人和吸尘器哪个好?
  6. 看完这13张图,不得不佩服还是外国人会玩人工智能
  7. dedeCMS后台入口安全修改
  8. Java高并发编程详解系列-7种单例模式
  9. spark结构化流保存mysql_[Spark]-结构化流之输出篇(待重修)
  10. lingo12软件下载及lingo语言入门资源
  11. Mac中在Matlab中安装Mosek
  12. matlab 一个简单的FIR低通滤波器设计例子
  13. VRRP在城域网中的应用
  14. Hello, CTF WP
  15. 【安装教程】——widows_pycharm远程连接Linux服务器
  16. freemarker模板中long类型问题
  17. 久别重逢,如期而归——杭州区块链国际周7月开启!
  18. 你以为SSL是安全的吗?
  19. java jni udt找不到so_移植UDT到Android平台
  20. 一文详解AES最常见的3种方案_AES-128、AES-192和AES-256

热门文章

  1. 微信小程序登录功能的前端设计与实现
  2. 图片上的文字怎么转换成文档?三个简单的方法
  3. 计算机毕业论文提纲如何写,计算机毕业论文提纲范文参考
  4. 基于人脸识别技术的校园宿舍管理系统
  5. 关于电化学传感器 + 趋肤效应
  6. 外卖“搭上”高铁已成事实,然叫好叫座难兑现?
  7. autodesk mudbox 2022 安装教程
  8. fft函数图像横坐标是什么_频谱图中横坐标为频率,纵坐标的幅值代表什么
  9. Miui 11备份文件的路径
  10. 按字符串里的数字排序