这次的博客带来了关于电量分析的相关知识,众所周知,目前网上关于电量分析的文章很少,也很少有把他讲的很细,今天就带大家来一起学习电量优化(博主自己最近也在学习)
当我们的设备忙着执行各种任务和各种复杂计算,秀自拍上传朋友圈图片、秀直播,设备硬件正在快速消耗电池电量来完成这些任务。很明显,你的任务处理的越复杂,电量就会消耗的越多和越快,一眨眼的功夫电量就消耗完了,用户的手机顿时变成个累赘的砖头了,这时候用户就会怀疑谁(哪个app)这么耗电,把它卸了!
写出耗电量低的应用的关键是要透彻理解它的全部过程。
在电子编程世界,这种硬件消耗电量 来执行任务的过程,叫做超时电流消耗,任何电子编程专业的人都会告诉 你,你的设备的各项活动在相同时间内,消耗的电量是不同的。
比如,很多手机号称待机好几天,这个确实是真的,不过就是使用飞行模式放在家里什么都不干,确实可以甚至可以坚持10多天。
但是我们一旦使用它,比如使用蜂窝式无线数据交换(3G、4G)、屏幕保持唤醒状态等。
作为开发者,我们很想知道我的应用执行的哪些任务消耗的电量是最多的?这个问题确实会很棘手。
电量消耗的计算与统计是一件麻烦而且矛盾的事情,记录电量消耗本身也是一个费电量的事情(所以很多设备都把这个监测电量的功能阉割掉了。)。
唯一可行的方案是使用第三方监测电量的设备,这样才能够获取到真实的电量消耗(因为第三方硬件监测的时候是用的自己的供电而不是用的手机的电量)。
耗电情况,例如:打开屏幕,所有要使用CPU/GPU工作的动作都会唤醒屏幕,都会消耗电量。这和应用程序唤醒设备还不一样。
比如使用叫醒闹钟(wakeclock)、AlarmManager、JobSchedulerAPI。
待机状态的电量消耗:
使用和唤醒屏幕后:
当设备从休眠状态中,被应用程序假面唤醒时,你会看到在第一次唤醒时,这里有一条电量使用高峰线。
CPU唤醒时的高峰线:
接下来就是后续的一些执行的消耗了:
值得注意的是当工作完成后,设备会主动进行休眠,这非常重要,在不使用或者很少使用的情况下,长时间保持
屏幕唤醒会迅速消耗电池的电量。
另外一种,蜂窝式无线也是耗电量非常可怕的。我出门就经常这样干,当我发现手机快没电的时候,
我把蜂窝无线关了,留着紧急情况自己可以主动打电话,这个很有用可以延长2小时的使用哦。
蜂窝式无线:
当设备通过无线网发送数据的时候,为了使用硬件,这里会出现一个唤醒好点高峰。接下来还有一个高数值,这
是发送数据包消耗的电量。然后接受数据包也会消耗大量电量 也看到一个峰值。
所以我们知道了,开启无线模式这个过程非常耗电,那么硬件这块为了防止频繁开启关闭耗电,采取了一个无奈
的办法,会在一个小段时间内保持开启模式,防止短时间内还有数据包需要接收。这些数据非常有用,可是不是所有
开发者都有这个第三方设备跟踪。但是使用Android L版本就可以利用到新的一系列的工具来优化应用程序的耗电。
(这里显然不要考虑兼容性问题吧,我只是想测电量消耗问题,同一款APP在不同版本上耗电情况应该不会有太大影
响。)
分析工具(下篇博客介绍)
Battery Historian
电量使用记录分析工具。
通过ADB获取的数据,通过使用Battery Historian工具分析处理后,得到的html结果文件,用浏览器可以直接查
看的。Battery Historian工具是一个独立的Python开源脚本,可以从github上下载。
环境安装将在下篇博客讲解。