一、概要
耗电量分析是衡量应用性能表现的一个重要指标,要做好一款app,不仅仅是实现功能,我们需要考虑很多性能指标,让用户用的更爽,在开发过程中,要充分考虑到各项性能指标,比如定位精度,更高的精度,往往意味着更高的能耗,因此要平衡好精度和功耗,避免我们的app过多的过多的电量消耗,而界面卡顿可能意味着大量的多余计算,不仅影响流畅度,影响电量消耗,网络的不合理使用,也会增加耗电量,这些都是影响耗电量和用户体验的重要因素。
用户可以在 设置-电量
查看过去24小时及七天,自己 app 耗电情况排行榜。如果你的 app 不幸在列表中名列前茅,然而如果这个 app 并不像微信
那样会被重度使用时,那挑剔的用户就会认定这是一个极其耗电的 app, 然后极有可能删除这个 app 。显然,我们作为开发者是不希望碰到这种窘境的。因此,我们非常需要关注自己 app 的电量能耗情况是否合理,以此提升用户体验,避免 app 被删除的厄运。
二、耗电量的基本概念
Idle
表示app处于休眠状态,几乎不使用电量。Active
状态说明app处于工作状态,用电量比较高,图中的第二个Active
的耗电远高于第一个,这是因为app所做的工作类型不同而导致的。Overhead
指的是调起硬件来支持app功能所消耗的电量,这部分是支持硬件工作必要的电量消耗。- 图中横线以下所包区域是固定开销(
Fixed Cost
),横线以上区域是动态开销(Dynamic cost
)。
三、节省电量的四个基本原则
-
识别:想清楚你需要app在特定时刻需要完成哪些工作,如果是不必要的工作,考虑延后执行或者省去。
-
优化:优化app的功能实现,尽可能以更有效率的方式去完成功能。
-
合并:不需要立刻获取,可以延后合并执行,比如合并网络
-
减少:在满足需求的基础上,尽量减少做重复工作的频率。
四、耗电大户
1、CPU
app做的每件事几乎都需要用CPU,所以CPU是电能消耗大户,CPU使用量越大,功率越大,电能消耗越多,电池消耗也就越快。功率大小由于设备、处理器、其他硬件资源等会有所不同,表1基于闲置状态(idle state),给出了不同CPU使用量的一个大致的对比。
我们在使用我们app执行任务有动态能耗(dynamic cost)和固定能耗(fixed cost)。
- 动态能耗也就是app实际工作消耗的能量。
- 固定能耗是在任务执行前后把系统和各种资源调用起来和关闭所消耗的能量。出现大量零散的工作时,在零散的任务之间因为资源可能永远没法真正变为闲置,所以有动态能耗的同时固定能耗也很高。这种情况导致大量电能在相对较小的实际工作中流失了。下图是动态能耗和固定能耗图
2、GPU
app内容每次更新到屏幕上都需要消耗电能处理像素信息。动画和视频格外耗电。不经意的或者不必要的内容更新同样会消耗电能,所以UI不可见时,应该避免更新其内容。
3、网络
app进行网络通信时,蜂窝数据和Wi-Fi等元器件开始工作就会消耗大量电能,应减少数据传输,合并网络请求,适当的网络延时等。
4、定位
app为了记录用户的活动或者提供基于位置的服务会进行定位。定位精度越高,定位时间越长,消耗电量也就越多。
5、传感器和蓝牙
长时间用不上加速度计、陀螺仪、磁力计等设备的动作数据时,应该停止更新数据,不然也会浪费电能。应按需获取,用完即停。蓝牙活动频度太高会消耗电能,应该尽量分批、减少数据轮询等操作。
五、测试工具
1.Energy Impact
1.1Average energy Imapct
Average energy Imapct
代表的是app的耗电量评级,low(绿色区域)
、high (黄色区域)
、very high(红色区域
)。通过这张图,我们可以大致了解 app 电量的使用情况。理想的状态是 app 处于 low、high 状态。如果处于very high状态,我们需要分析哪些功能导致耗电量大涨。
1.2Average Componet Utilization
Average Componet Utilization
展示的是Overhead
、CPU
、NetWork
、Location
、GPU
各部分耗电量的占比,通过这个占比,我们可以分析各部分耗电量是否较高。
1.3Energy Impact
Energy Impact
会实时展示电量消耗,每个柱子代表每秒的电量消耗,通过每个柱子由不同的颜色组成,展示各部分电量消耗的比例,依次是Overhead(红色)、CPU(蓝色)、网络(深黄)、定位(淡黄)、GPU(绿色)、后台(深灰)、前台(淡灰)、Suspend(白色)
。
综上:在使用Energy Impact
的过程中,首先可以观察Average energy Imapct
。了解app的整体耗电量情况,处在什么位置,对整体有个大概的了解,然后通过Average Componet Utilization
来观察app整体耗电量中,具体哪一部分占比较高,最后使用Energy Impact
进行实时分析,分析页面各部分消耗是否是必要的,比如某个页面只在进入的时候需要获取经纬度,后面不需要实时获取经纬度,那么在进入页面获取经纬度以后,就要将定位关闭,以减少电量消耗。
优点:
实时性高、数据分析可以通过图形直观展示、可以获取`Overhead(红色)、CPU(蓝色)、网络(深黄)、定位(淡黄)、GPU(绿色)、后台(深灰)、前台(淡灰)、Suspend(白色)等数据和各部分数据占比。
缺点:
颗粒度较大,想做详细的分析,需要借助,其它工具。比如针对CPU的消耗情况,可以