Android性能优化之耗电优化

作为移动设备,电池重要性不言而喻,设备没有电那就真的只能拿来砸核桃了。所以作为开发者的我们,为了给用户带来更好的体验,耗电优化一直是我们撇不开的话题。

1、为什么耗电

屏幕快照 2017-03-23 下午2.51.24.png

通过上图先把用户-电量这一流程抽象出来,设备的耗电根本原因在于对硬件的使用,耗电越严重说明对硬件使用的越频繁。用户对app频繁使用说明了你用户黏性做的好,我们不能左右,所以我们要在app对硬件调用上做优化来达到节省电量的目的。

先看下移动设备元件耗电大户有哪些:


fullsizerender.jpg

2、屏幕

屏幕是耗电最大元件之一,但是用户要和app交互就要点亮屏幕,有人可能会觉得屏幕的明暗是用户自己根据喜好设定的,我们无可奈何。其实不然,在有些时候是可以通过UI的设计来减少屏幕电能消耗的。

在这之前我们先来看下目前常用手机屏幕材质:LCD和LED(OLED)。

  • LCD概述
    LCD又名液晶显示屏,屏幕由成千上万液晶分子负责像素显示,并通过背光来将其照亮。所以说每个像素点都使用了同一个光源,每个像素消耗的电量是相同的。
  • LED概述
    LED每个屏幕像素都可以看成是一个LED灯,由RGB三种颜色共同呈现,不同颜色能量消耗也各不相同。黑色不使用任何颜色,不消耗能量,白色相反使用了所有颜色且亮度高,所以能量消耗也更多。

优化方案:较暗的颜色比明亮的颜色更节能,所以在很多留白的地方可以考虑使用偏暗的色调,当然这要在不影响用户体验的前提下。

3、无线网络

无线网络主要是WIFI和移动运营商网络,通常情况下使用移动网络要比WIFI耗电要多一些。

  • 移动网络
    移动网络数据传输有3种状态:
    Full power:高功率状态,网络激活,允许设备以最大传输速率进行传输。
    Low power:低功率状态,传输速率低于15kbps,耗电是Full Power状态的一半,一般不能直接从程序中进入该状态,而是由Full Power状态降级进入。
    Standby:�空闲状态,没有数据连接需要传输,耗电最少。

这三种状态有一个转换流程:

mobile_radio_state_machine.png

可以看出,三种状态耗电不同,要使耗电最低应该尽量保持状态在空闲或低功率下。从空闲状态转换到高功率状态需要2s,从低功率状态转换到高功率状态需要1.5s。应用中每创建一个网络连接,网络射频都会转到高功率状态,数据传输完毕降回低功率状态,降回过程需要5s,这5s耗电量保持在高功率状态,低功率降回到空闲状态需要12s,期间一直保持低功率状态。所以每次的数据传输都将导致将近20s电量的消耗。

  • WIFI网络
    WIFI在active状态下有4种模式:低功率、高功率、低传输、高传输。
    当从低(高)功率状态传输数据时,WIFI会暂时进入相应地低(高)传输状态,一旦数据传输完毕就回到初始状态。

WIFI耗电是受包率(每秒接收和发送的数据包)和网速因素影响的。如果因素良好,即网络良好时,数据传输的很快,所以WIFI的高功率状态维持时间很短。这也就是为什么说移动网络耗电高于WIFI耗电,因为同样的数据大小传输时,移动网络固定状态转换就需要近20s的电量消耗。

通过上面了解网络连接过程,应该心里有了大概的优化建议。

  • 网络优化方案:
    • 减少网络高功率保持时间:
    • 1.文本和文件压缩传输。
      不管发送还是请求数据,在数据传输过程中使用gzip将数据进行压缩。经过压缩的数据需要更短的时间传输即可完成,这样是无线所处的高功率状态时间更短,从而减少了耗电。
    • 2.精简文本文件。
      所谓精简就是去掉文本中空行、空格、注释等无意义内容。
<html>  
  <title> A Sample Page</title> 
  <body> 
    with some sample text 
    <--do more here--> 
  </body> 
</html>

精简后

<html>  <title> A Sample Page</title> <body> with some sample text <--do more here--> </body> </html>
- 3.根据显示大小从服务器获取图片

①请求一个图片时,客户端提供一个分辨率大小,服务器根据分辨率把裁剪缩放后的图片给客户端返回。也可以使用Android端使用Bitmap.Option自行获取缩放的图片
②使用webp图片。

  • 减少网络请求次数
    • 1.使用缓存。
      把经常使用的文件缓存到本地,如头像icon、好友信息等。以后很多时间都可以直接从本地读取缓存减少网络请求次数。

    • 2.移动网络下最好批量执行网络请求,利用一次高功率状态执行尽可能多的事情,从而减少频繁间隔请求导致状态转换消耗更多电量。

4、CPU

cpu利用率高和cpu的频率高没有必然关系,这取决于cpu调频策略。高利用率和高频率的cpu都会导致高耗电。

  • 浮点运算比整数运算相对更消耗cpu时间片,相应耗电也就增加,因而在编码过程尽量减少浮点运算,例如使用位移代替除法。

  • 避免wakelock不正确使用
    wakelock可以唤醒设备也可以阻止设备休眠。在PowerManager类中谷歌已经声明了:这个类会影响设备电量,除非必须,否则尽量不要使用该类,同时使用完毕要尽快释放。wankelock有几种类型,在使用时注意选择正确地类型。

  • 使用JobScheduler
    很多时候为了满足我们的需求而没有考虑cpu的感受,为了执行1s中的数据区唤醒cpu,但实际却消耗了约两分钟的电量。为此谷歌在5.0系统下提供了JobScheduler组件,使用场景:
    必要不紧急,可延迟执行的任务,比如数据块更新,bug日志上报。
    耗电大德任务,如备份在充电时执行。

  • Doze模式

Doze模式通过限制应用访问网络及其他一些操作频率,从而减少cpu开销达到省电目的。在6.0系统上未连接电源、屏幕关闭就会进入Doze模式。但是为了不影响应用正常工作,系统还会周期性退出Doze,在退出期间去执行那些被挂起的任务,这个时间窗口称作维护窗口。

5、其他优化

  • 传感器
    每个传感器都有最大信号频率,开发者在使用传感器时要设置合适的采样频率。最后在使用完成后一定要进行注销,否则激活的传感器会一直进行检测,造成cpu负载和电量消耗。

后面的章节会写一些关于电量检测分析工具的使用。

为了耗电优化干的这些活用户感知不到,但是如果不去优化,肆意使用,那用户就很容易感知到了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,117评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,328评论 1 293
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,839评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,007评论 0 206
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,384评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,629评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,880评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,593评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,313评论 1 243
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,575评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,066评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,392评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,052评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,082评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,844评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,662评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,575评论 2 270

推荐阅读更多精彩内容