功耗优化-页面停留功耗从100mmA到0

背景

在一个页面改版后,页面停留平均功耗从改版前360mmA上升到460mmA。功耗严重上升,需要优化才上线。

原理先行

功耗影响的要素
耗电组成

CPU

所有的cpu计算都是消耗电量的。主要包括:数学运算,浮点运算比较耗cpu资源,尽量使用移位代替。尽量避免使用算法复杂度的算法。最为典型的就layout布局:如果多嵌套一层,算法复杂度就越高,需要多次执行onMeasure,onLayout和onDraw。这样情况应该使用约束布局或者相对布局减少嵌套层数。
cpu分析
通过Android studio-view-tools Windows——Profiler可以查看cpu的具体执行情况
cpu执行情况
发现功耗异常时,首先可以查看cpu的执行情况。通过Record记录cpu的执行方法详情。

  • 如果是停留页面,那么所有的线程应该都是空闲,否则都是功耗异常,需要优化
  • 如果存在页面更新,可以开发者模式-显示面更新,查看更新区域是否已经是最小区域

屏幕

屏幕是耗电最大元件之一。显示基本所有的手机屏幕都是LED类型。LED每个屏幕像素都可以看成是一个LED灯,由RGB三种颜色共同呈现,不同颜色能量消耗也各不相同。黑色不使用任何颜色,不消耗能量,白色相反使用了所有颜色且亮度高,所以能量消耗也更多。而且根据实践,透明度需要消耗更多的内存,cpu计算和待机功耗
在待机功耗中,使用偏暗色的颜色,能够明显降低功耗。

网络、定位、传感器和定时任务等

数据网络比wifi更新耗电。定位和传感器等在使用过程中都会耗电。使用JobScheduler代替wakelock。

过程分析

  1. 知道页面停留功耗增大后,立刻使用Android Profiler分析cpu的执行情况。发现并没有任何log和线程执行情况,也没有页面更新。确认不是cpu、网络、定位和界面更新等等可执行情况
  2. 考虑到屏幕的情况,应该和布局有关系。采用二分法和控制变量法。经常统计,其他页面也存在功耗异常问题。而他们的共同点,是多新增了几条横线。果然在删除掉几条新增的横线时,功耗立即回归到360mmA左右。
  3. 但是UI效果需要这几条横线,怀疑是横线的实现方式有问题。分析代码,发现横线使用了shape,并且使用了8位颜色值。修改成6位颜色值后,立刻功耗优化了60mmA.
  4. 还是超标了40mmA。再次查询原理,对比前后的ui界面,发现白色区域高度增加了160dp。把之前的界面拉伸160dp后,发现改版前电流增加了20mmA
  5. 还是超标了20mmA。再次分享横线的实现方式,发现横线view启用了软件加速(LAYER_TYPE_SOFTWARE)。去掉之后,再次优化了20mmA,达到标准。软件加速,是因为虚线才需要软件加速,但是普通横线并不需要。

总结

功耗异常,可以通过查看cpu执行情况和布局方式逐步定位。在实际中,耗电统计需要专门的仪器。普通开发者最简单的方式是通过手机的耗电统计。
本次主要经过:去除透明度——分析颜色值明暗——去掉软件加速。实现了页面停留功耗从100mmA到0。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值