手记

【学习打卡】第9天 App 电量优化

课程名称:Top团队大牛带你玩转Android性能分析与优化
课程章节:App性能概览与平台化实践
主讲老师:随风绽放

课程内容

电量优化介绍及方案选择

在平时的开发中,通常手机一直连接电脑,对手机的耗电有多快并没有直观的感受,为了让 App 不会因为电量消耗过高被用户排斥,需要对 App 的电量消耗做优化处理。

由于用户的手机千差万别,不同厂商使用不同的硬件,又设置了不同的参数,使用了不同的算法,使得电量消耗难以量化。在测试阶段,需要针对不同的耗电场景进行测试,比如复杂运算的场景,视频播放的场景等。还要考虑相关传感器的使用时长、耗电量、发热情况等。最后还要测试后台静默时的耗电情况,通常有以下的方案来获取耗电情况。

  • 通过设置页面的耗电排行,这个方案比较直观,但没有办法获取详细的数据,对于解决优化的问题帮助不大。需要找特定场景专项测试,比如在某一个界面操作一段时间,然后来判断这个页面是否耗电。
  • 通过广播监听电量变化,通过注册广播 ACTION_BATTERY_CHANGED,来获取电池电量、充电状态、电池状态等信息。这个方案的价值也不大,只能获取手机的整体耗电量,不能针对单个 App,而且实时性差、精度较低,只能被动的等待通知。
  • Battery Historian,这是 Google 推出的一款 Android 系统电量分析工具,支持 5.0(API 21)及以上系统的电量分析。工具可以查看自设备上次充电以来各种汇总统计信息,而且可以选择对应的 App 查看详细信息。可以获取可视化展示指标,包括耗电比例、执行时间、次数等。这款工具也只能线下使用。

电量优化套路总结

常见的 App 电量优化套路:

  • 对 CPU 时间片的优化,当 CPU 长期处于唤醒状态,或者长时间处在高负荷状态,比如退后台时没有停止动画都会增加耗电。可以获取运行过程线程 CPU 的消耗,定位 CPU 占用率的异常方法,减少后台应用的主动运行。
  • 网络相关,通常情况下,使用 WIFI 连接网络时的功耗要低于使用移动网络的功耗。为了避免网络连接所带来的电量消耗,尽量在 WIFI 环境下进行数据传输,在使用 WIFI 传输数据时,应该尽可能增大每个包的大小(不超过 MTU),并降低发包的频率。在蜂窝移动网络下需要对请求时机及次数控制,可以延迟执行的网络请求稍后一起发送,最好做到批量执行,尽量避免频繁的间隔网络请求。使用 JSON 和 Protobuf 进行数据压缩,减少时间。禁止使用轮询功能,轮询会导致网络请求一直处于被激活的状态,耗电过高。
  • 定位相关,根据场景谨慎选择定位模式,对定位准确度没那么高的场景可以选择低精度模式。可以考虑网络定位代替,使用后务必及时关闭,减少更新频率,例如定位开启一定时间后超过某个阈值可以执行一个兜底策略,强制关闭 GPS。
  • 界面相关,离开界面后停止相关活动,例如关闭动画。耗电操作判断前后台,如果是后台则不执行相关操作。
  • WakeLock 相关,WakeLock 常用于后台播放音视频、录制音视频、下载文件的情况。如果没有合理使用 WakeLock,则会造成严重的耗电问题,为了避免该问题,应该定期针对使用了 WakeLock 的模块进行重点排查。在使用 WakeLock时注意成对使用 acquire、release,建议使用带参数的 acquire,避免没有及时释放而导致电量消耗过大。使用 finally 确保 release 一定会被调用。常亮场景使用 keepScreenOn
  • JobScheduler,在符合某些条件时创建执行在后台的任务,把不紧急的任务放到更合适的时机批量处理,比如手机在充电状态才去做耗电工作。

课程收获

从实际项目的角度分析了电量优化的难度,以及做电量优化的必要性。而且给出了一套详细的 App 电量优化方案。

0人推荐
随时随地看视频
慕课网APP