电池是移动设备中的宝贵资源。消耗电池电量的应用程序已被卸载且评级不佳。本指南介绍了过度消耗的原因以及创建节能应用程序的技术。
为什么电池很重要
用户体验
没有人想要一个会耗尽电池电量的应用程序。沮丧导致卸载。
评论
“电池耗尽”经常出现在负面评论中。
系统限制
iOS 和 Android 限制消耗过多的应用程序。后台终止。
过度消费的原因
后台活动
应用程序未使用时运行的进程。
固定位置
GPS是最大的消费者之一。仅在必要时使用。
网络请求
频繁请求,尤其是在屏幕关闭的情况下。
唤醒锁
不正确地保持 CPU 或屏幕唤醒。
重动画
复杂的动画需要 GPU。谨慎使用。
精加工
繁重的计算、媒体解码。
过多的推送通知
每个通知都会唤醒设备。
监控消耗
###安卓
电池历史记录器、Android Studio 分析器。
iOS
Xcode 能量计、仪器能量日志。
指标
CPU 时间、网络活动、位置更新、唤醒。
网络优化
批处理
将请求分组在一起,而不是一项一项地进行。
压缩
较小的数据=较短的传输时间。
缓存
避免重复请求。积极的缓存。
智能预取
连接并使用 Wi-Fi 时下载数据。
指数退避
失败不应导致主动重试。
位置优化
足够的准确性
使用必要的最低精度。精度高消耗大。
地理围栏
当您进入该区域时让系统通知您。不要经常进行轮询。
重大位置变化
对于 iOS,持续更新的有效替代方案。
融合位置提供商
对于Android来说,它平衡了准确性和消耗。
不必要时停止
当您不再需要侦听器时将其删除。
后台工作
iOS
后台应用程序刷新有限。用于任务的 BGTaskScheduler。
###安卓
用于可延迟任务的 WorkManager。尊重打瞌睡模式。
一般原则
做最少必要的事情。完成并睡觉。
避免轮询
使用推送/websockets 而不是持续轮询。
唤醒锁
它们是什么
防止CPU或屏幕休眠。
风险
忘记唤醒锁 = 电池电量耗尽。
良好实践
最小化持续时间、立即释放、使用超时。
###安卓
首选 JobScheduler 或 WorkManager。
高效的动画
硬件加速
尽可能使用。 GPU 的图形处理效率比 CPU 更高。
帧速率
60fps 很流畅,但很耗电。在可接受的情况下减少。
离屏动画
暂停不可见的动画。
洛蒂
高效的矢量动画。
渲染
简单布局
深层的等级制度代价高昂。压平。
RecyclerView/列表
回收视图。不要不断地重新创建。
透支
避免多次绘制像素。用工具检查。
推送通知
正确的优先级
非紧急的正常优先级。在服务器上进行批处理。
小有效负载
更少的数据=更少的处理。
无声推送
用于后台同步。不必要时不要唤醒屏幕。
媒体
高效编解码器
在许多情况下,H.265/HEVC 比 H.264 更高效。
足够的分辨率
请勿将 4K 解码为缩略图。
回放
不可见时暂停。释放资源。
传感器
按需使用
仅在必要时注册监听器。
合适的频率
满足要求的最低频率。
批量发货
小组阅读以减少醒来的次数。
诊断工具
###安卓
- 电池历史学家
- Android Studio 分析器
- dumpsys 电池统计
iOS
- Xcode 能源管理器
- 仪器(能量日志)
- 度量工具包
测试
真实场景
在实际使用中进行测试,而不仅仅是在实验室中。
各种设备
不同设备的性能有所不同。
电池电量低
行为有20%、10%、5%。
背景扩展
将其留在后台几个小时。措施。
系统API
###安卓
- 打瞌睡模式:尊重、测试
- 备用桶应用程序:了解类别
- 省电模式:适应行为
iOS
- 低功耗模式:减少活动
- 后台应用程序刷新:尊重偏好
- BGTaskScheduler:高效任务
深色模式
OLED屏幕
黑色像素关闭。深色模式可以保存。
原生支持
实施以下准则。系统适应。
常见错误
GPS 始终开启
忘记停止位置更新。
积极计时器
setInterval 1 秒不必要。
唤醒锁泄露
在异常或边缘情况下不发布。
生产中的调试
日志过多,调试功能已打开。
结论
电池优化是开发人员的责任。监控消耗、最小化背景、使用高效的 API 并在实际条件下进行测试。用户感谢您,并留下来。
##常见问题解答
1) 我如何知道我的应用程序是否消耗大量电池? 使用分析工具。与类似的应用程序进行比较。
2)背景是最大的问题? 经常是的。关闭屏幕时的活动成本非常高。
3) GPS 消耗多少? 它是最大的消费者之一。使用所需的最小精度。
4) 深色模式真的省电吗? 在 OLED 屏幕上,是的,显着。液晶显示屏,没有。
5) 如何测试电池消耗? 使用分析器,在真实设备上进行测试,模拟长时间使用。
另请阅读
- [移动性能优化:完整指南0
- 【移动端性能优化-初学者实例1
- 【应用中的电池消耗:与真实案例的比较2
- [应用程序中的电池消耗:比较和清单3
- 【应用中的电池消耗:比较和快速指南4
- 【Android原生开发:如何采取必要步骤5
