应用程序耗电的实质,是所启用的硬件在消耗电量。

手机的耗电单元 
CPU: 应用处理器(AP)和基带处理器(BB或BP)

GPU(图形处理单元)

外设:wifi,BT, GPS,LCD等

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

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

耗电量对比:

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

一般手机待机时,AP、LCD、WIFI均进入休眠状态,这时Android中应用程序的代码也会停止执行,只会有基带处理器(BP)的耗电。

为什么微信比短信耗电严重很多呢? 答案就是短信使用BP耗电小, 而微信使用AP耗电大.

WakeLock机制:

Android为了确保应用程序中关键代码的正确执行,提供了Wake Lock的API,使得应用程序有权限通过代码阻止AP进入休眠状态。 
WakeLock阻止应用处理器(AP)挂起,确保关键代码的运行,通过中断唤起应用处理器(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.(参见api文档)

但如果不领会Android设计者的意图而滥用Wake Lock API,为了自身程序在后台的正常工作而长时间阻止AP进入休眠状态,就会成为待机电池杀手。

AlarmManager 
AlarmManage有一个AlarmManagerService,该服务程序主要维护app注册下来的各类Alarm, 并且一直监听Alarm设备, 一旦有Alarm触发,或者是Alarm事件发生,AlarmManagerService就会遍历Alarm列表,找到相应的注册Alarm并发出广播. 首先,Alarm是基于RTC实时时钟计时, 而不是ap计时; 其次, Alarm会维持一个CPU的wake lock, 确保Alarm广播能被处理.

AlarmManager在Alarm指定的Receiver的onReceive()方法执行期间持有一个CPU唤醒锁(参见:AlarmManagerService#AlarmThread申请的wakelock), 这样能保证电话休眠时也能处理Alarm发出的PendingIntent指定的广播。一旦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。 

WakeLock, AlarmManager, JobScheduler的更多相关文章

  1. Android N开发 你需要知道的一切

    title: Android N开发 你需要知道的一切 tags: Android N,Android7.0,Android --- 转载请注明出处:http://www.cnblogs.com/yi ...

  2. Android应用性能优化(转)

    人类大脑与眼睛对一个画面的连贯性感知其实是有一个界限的,譬如我们看电影会觉得画面很自然连贯(帧率为24fps),用手机当然也需要感知屏幕操作的连贯性(尤其是动画过度),所以Android索性就把达到这 ...

  3. 转——Android应用开发性能优化完全分析

    [工匠若水 http://blog.csdn.net/yanbober 转载请注明出处.] 1 背景 其实有点不想写这篇文章的,但是又想写,有些矛盾.不想写的原因是随便上网一搜一堆关于性能的建议,感觉 ...

  4. Android 应用开发性能优化完全分析

    1 背景 其实有点不想写这篇文章的,但是又想写,有些矛盾.不想写的原因是随便上网一搜一堆关于性能的建议,感觉大家你一总结.我一总结的都说到了很多优化注意事项,但是看过这些文章后大多数存在一个问题就是只 ...

  5. 【转】Android应用开发性能优化完全分析

    http://blog.csdn.net/yanbober/article/details/48394201 1 背景 其实有点不想写这篇文章的,但是又想写,有些矛盾.不想写的原因是随便上网一搜一堆关 ...

  6. Android应用开发性能优化完全分析

    1 背景 其实有点不想写这篇文章的,但是又想写,有些矛盾.不想写的原因是随便上网一搜一堆关于性能的建议,感觉大家你一总结.我一总结的都说到了很多优化注意事项,但是看过这些文章后大多数存在一个问题就是只 ...

  7. android开发性能分析

    1 背景 其实有点不想写这篇文章的,但是又想写,有些矛盾.不想写的原因是随便上网一搜一堆关于性能的建议,感觉大家你一总结.我一总结的都说到了很多优化注意事项,但是看过这些文章后大多数存在一个问题就是只 ...

  8. App架构师实践指南四之性能优化一

    App架构师实践指南四之性能优化一     1.性能维度常见用来衡量App性能的维度如图9-1所示.其中,性能指标包括电池(电量/温度).流量(上行流量/下行流量等).CPU(平均/最大/最小).内存 ...

  9. 转:Android应用开发性能优化完全分析

    转自:http://blog.csdn.net/yanbober/article/details/48394201 1 背景 其实有点不想写这篇文章的,但是又想写,有些矛盾.不想写的原因是随便上网一搜 ...

随机推荐

  1. box-shadow 的一些使用

    1.只有左侧有阴影 box-shadow: -10px 0px 3px 1px #aaaaaa;

  2. web cache server方案比较:varnish、squid、nginx

    linux运维中,web cache server方案的部署是一个很重要的环节,选择也有很多种比如:varnish.squid.nginx.下面就对当下常用的这几个web cache server做一 ...

  3. java工程中的.classpath<转载>

    第一部分:classpath是系统的环境变量,就是说JVM加载类的时候要按这个路径下去找,当然这个路径下可以有jar包,那么就是jar包里所有的class. eclipse build path是ec ...

  4. MySQL 的乐观并发控制Optimistic concurrency control

    默认情况下, MySQL的Innodb事务隔离级别是重复读 repeatable read, SELECT @@GLOBAL.tx_isolation, @@tx_isolation;REPEATAB ...

  5. PAT 1016. 部分A+B (15)

    正整数A的"DA(为1位整数)部分"定义为由A中所有DA组成的新整数PA.例如:给定A = 3862767,DA = 6,则A的"6部分"PA是66,因为A中有 ...

  6. 统计:P值 & α值

    来源:知乎:P值与α值的关系 一楼 P是"拒绝原假设时犯错误概率"又或者说是"如果你拒绝掉原假设实际上是在冤枉好人的概率". 不管怎么表达理解上都有点绕,所以你 ...

  7. 快速判断素数 --Rabin-Miller算法

    以前我在判断素数上一直只会 sqrt(n) 复杂度的方法和所谓的试除法(预处理出sqrt(n)以内的素数,再用它们来除). (当然筛选法对于判断一个数是否是素数复杂度太高) 现在我发现其实还有一种方法 ...

  8. Android — Camera聚焦流程

    原文  http://www.cnphp6.com/archives/65098 主题 Android Camera.java autoFocus()聚焦回调函数 @Override public v ...

  9. Web服务器之iis,apache,tomcat三者之间的比较

    IIS-Apache-Tomcat的区别 IIS与Tomcat的区别 IIS是微软公司的Web服务器.主要支持ASP语言环境. Tomcat是Java Servlet 2.2和JavaServer P ...

  10. 机械大楼电梯控制项目软件 -- github团队组建

    目前在Github网站上建立了机械大楼电梯控制项目软件的软件仓库(Repository),提供了软件功能需求说明文档和Automation Studio程序模板.地址为 https://github. ...