Android 电量优化概览

举报
帅次 发表于 2024/02/04 11:42:02 2024/02/04
【摘要】 一、三大耗电模块一、三大耗电模块1.显示2.网络3.CPU二、显示避免时常唤醒屏幕不要阻止手机休眠过度绘制2.1 Overdraw简介。

一、三大耗电模块

  • 1.显示

  • 2.网络

  • 3.CPU

二、显示

  • 避免时常唤醒屏幕

  • 不要阻止手机休眠

  • 过度绘制

2.1 Overdraw简介

        Overdraw就是过度绘制,是指在一帧的时间内(16.67ms)像素被绘制了多次,理论上一个像素每次只绘制一次是最优的,但是由于重叠的布 局导致一些像素会被多次绘制,而每次绘制都会对应到CPU的一组绘图命令和GPU的一些操作,当这个操作耗时超过16.67ms时,就会出现掉帧现象,表现为应用卡顿,所以对重叠不可见元素的重复绘制会产生额外的开销,需要尽量减少Overdraw的发生。

2.2 Overdraw检测

        Android提供了测量Overdraw的选项,在开发者选项-调试GPU过度绘制(Show GPU Overdraw),打开选项就可以看到当前页面Overdraw的状态,就可以观察屏幕的绘制状态。该工具会使用三种不同的颜色绘制屏幕,来指示 overdraw发生在哪里以及程度如何,其中:

  • 没有颜色: 意味着没有overdraw。像素只画了一次。

  • 蓝色: 意味着overdraw 1倍。像素绘制了两次。大片的蓝色还是可以接受的(若整个窗口是蓝色的,可以摆脱一层)。

  • 绿色: 意味着overdraw 2倍。像素绘制了三次。中等大小的绿色区域是可以接受的但你应该尝试优化、减少它们。

  • 浅红: 意味着overdraw 3倍。像素绘制了四次,小范围可以接受。

  • 暗红: 意味着overdraw 4倍。像素绘制了五次或者更多。这是错误的,要修复它们。

2.3 UI优化优化

  • 1.使用RelativeLayout和ConstraintLayout减少层级嵌套。

  • 2.去掉Window的默认背景。

  • 3.去掉其他不必要的背景。

  • 4.自定义View处理。

  • 5.ViewStub高效占位符。

  • 6.Merge。

三、网络

  • 大数据量的网络传输

  • 不停的网络切换

3.1 移动网络

  • Full power: 能量最高的状态,移动网络连接被激活,允许设备以最大的传输速率进行操作。

  • Low power:一种中间状态,对电量的消耗差不多是Full power状态下的50%。

  • Standby: 最低的状态,没有数据连接需要传输,电量消耗最少。

3.2 Wi-Fi

  • 在理想情况下,吞吐量大,延迟低,通常是不计费。

通常情况下,使用Wi-Fi连接网络的功耗要低于移动网络。所以大数据量的网络传输(例如版本升级等使用WiFi更好)

3.3 网络优化

  • 1.网络请求之前,检查网络连接。没有网络连接不进行请求。

  • 2.判断网络类型,针对特定的数据在特定的网络下请求。例如:大量数据传输的时候,在wifi下请求。wifi下下载数据耗电量只有2、3、4、5G的1/3。

  • 3.界面展示的数据非Wi-Fi下不预取。

  • 4.使用效率高的解析工具。根据具体业务数据量的大小,选择合适的解析工具。例如Android上面的协议解析一般推荐json。

  • 5.使用GZIP压缩方式下载数据,能减少网络流量,缩短下载时间。

  • 6.合理使用缓存,避免重复操作。

  • 7.使用推送,代替循环请求。

  • 8.触发网络请求的操作,每次都会保持无线信号持续一段时间,我们可以把零散的网络请求打包进行一次操作,避免过多的无线信号引起的电量消耗。

  • 9.实时的信息上报后台运行时改成非实时上报。

  • 10.合并网络请求,减少请求次数。

  • 11.尽量利用Wi-Fi传输信息。

四、CPU

  • CPU频率
    • CPU频率表示CPU的计算能力,频率决定CPU周期,互为倒数,CPU主频越快,耗时越短。

  • CPU时间片
    • 在计算机中,每隔N个高电频脉冲,时钟计算器加1,可以把自然时间分成固定的小块这个就是。

    • 时间片:CPU时间片「10ms」 单位是jiffies。

  • CPU利用率
    • CPU分「用户态,系统态,空闲态」,利用率 = (执行用户态 + 系统态的jiffies )/ 总jiffies。

4.1 变频

  • Ondemand:官方内核默认使用这种调速器,规则是有高需求,迅速跳到最大频率,有低需求时迅速降到最小频率。

  • Conservative:规则是慢升快降,注重省电,有高需求,逐渐提高频率,有低需求时,迅速跳到最小频率。

  • Interactive:规则是快升慢降,有高需求,逐渐提高频率,有低需求时,逐渐减低频率Lulzactive:根据负载逐级升高或者降低频率。

  • Powersave:把频率锁定在设定范围的最小值,负载再高也不升高频率,很省电。

  • Performance:把频率锁定在设定范围的最大值,无论负载如何,CPU都全速运行,很费电。

注:CPU的频率高才越耗电

4.2 CPU优化

  • 计算优化;

  • 避免WakeLock使用不当;

  • 避免Alarm Manager使用不当;

  • 使用Job Scheduler(WorkManager)。

4.2.1 计算优化

  • 尽量避开浮点运算

  • 除法变乘法

  • 充分利用位移(源码中有大量位移运算)

  • 查表法,直接使用映射关系,但会增加内存,视具体场景来定

  • 利用arm neon指令集做并行运算,需要ARM V7及以上架构CPU才能支持

4.2.2 避免WakeLock使用不当

WakeLock策略

  • PARTIAL_WAKE_LOCK:保持CPU 运转,屏幕和键盘灯有可能是关闭的。

  • SCREEN_DIM_WAKE LOCK:保持CPU 运转,允许保持屏幕显示但有可能是灰的,允许关闭键盘灯。

  • SCREEN_BRIGHT_WAKE_LOCK:保持CPU 运转,保持屏幕高亮显示,允许关闭键盘灯。

  • FULL_WAKE_LOCK: 保持CPU 运转,保持屏幕高亮显示,键盘灯也保持亮度。

  • ACOUIRE CAUSES WAKEUP:不会唤醒设备,强制屏幕马上高亮显示,键盘灯开启。有一个例外,如果有notification弹出的话,会唤醒设备。

  • ON_AFTER_RELEASE: WakeLock 被释放后,维持屏幕亮度一小段时间,减少WakeLock 循环时的闪烁情况。

4.2.3 避免Alarm Manager使用不当

  • ELAPSED REALTIME: 在多少 ms 后呼叫指定的 PendingIntent。若当时手机处于休眠,会延迟到手机醒来时(屏幕可能还是关的)才做。

  • 「ELAPSED REALTIME WAKEUP」:在多少 ms 后呼叫指定的 PendingIntent。若当时手机处于休眠,会唤醒手机做事,同时休眠期间被延迟的事也会一起执行。「是最常见的耗电凶手」

  • RTC:在指定的某段时间做事。若当时手机处于休眠,会延迟到手机醒来时 (屏幕可能还是关的)才做。

  • 「RITC WAKEUP」:在指定的某段时间做事。若当时手机处于休眠,「会唤醒手机做事」,同时休眠期间被延迟的事也会一起执行。通常用于闹钟、记事提醒等。

Alarm能不用最好不用。
ELAPSED_REALTIME_WAKEUP是精准闹钟,能不用最好不用。 

4.2.4 使用Job Scheduler(WorkManager)

  • 重要不紧急的任务,可以延迟执行,如定期数据库更新和数据上报。

  • 耗电量较大的任务,比如充电时才希望执行备份数据操作。

  • 不紧急可以不执行的网络任务,如在Wi-Fi环境预加载数据。

  • 可以批量执行的任务。

五、其他

5.1 GPS优化

  • 精准度要求不高 不用需要开启GPS,蜂窝无线提供的数据足以

  • 避免在信号弱(地下室)开启GPS

5.2 精简冗余的服务(Service), 避免长时间执行耗电操作。

5.3 避免与服务器建立长连接。

5.4 减少 CPU 资源使用(滑动或动画)。

5.5 减少 View 的 background 使用,特别是不明显的 background。增加性能、也减少功耗。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。