文章目录
参考 Google 官方文档 : 优化电池续航时间
一、Battery Historian 环境要求
在 【Android 电量优化】电量优化 ( 耗电量测试 | Battery Historian 简介 | apt 源更新 | Docker 安装 | Battery Historian 安装 ) 博客中主要进行了 VMWare 虚拟机环境下 Ubuntu 18.04.4 系统中安装 Battery Historian ;
在 【Android 电量优化】电量优化 ( 获取电量分析报告 | 阿里云服务器搭建 Battery Historian | 上传并生成分析报告 ) 博客中 , 讲解了在阿里云服务器上搭建 Battery Historian , 并在本地导出手机的电量报告 , 使用该工具分析电量时 , 每一步操作响应都很慢 ;
在之前使用 Battery Historian 时 , 搭建好环境之后 , 访问很慢 , 找了半天原因 , 发现使用 Battery Historian 必须翻墙 , 否则基本无法使用该工具进行电量分析 , 卡了半天 ; 既然翻墙的话 , 那么服务器和本地都翻墙吧 ;
这里给出最佳实践 : 必须翻墙 ; 之前访问巨慢 , 发现是没有翻墙的原因 ;
① 服务器可翻墙 : 在阿里云香港服务器上搭建 Battery Historian ;
② 本地电脑翻墙 : 本地访问 http://8.210.151.183:9999/ 地址 , 必须翻墙 , 否则无法使用 ;
二、上传电量报告
必须翻墙才能正常使用 , 否则这里点击 Browse , 选择文件后 , 没有任何响应 ;
1 . 选择文件并上传 : 访问 http://8.210.151.183:9999/ 地址 , 点击页面中的 Browse 按钮 , 从本地磁盘中选择 bugreport.txt 或 bugreport.zip 文件 , 选择完毕后 , 点击右侧的 Submit 按钮 , 提交上传 ;
2 . 等待上传完成 : 等待上传完毕 , 这个上传的比较慢 , 大概几分钟吧 ;
3 . 分析阶段 : 这个分析阶段很短 , 半分钟左右 ;
4 . 查看生成的报告 : 在下面的图标中可以分析出每个硬件设备的激活时间 , 及耗电量 ;
5 . 选择不同的应用进程对应的报告 : 点击 App Selection 可以选择不同的应用 , 进行分析 ;
三、Battery Historian 电量分析报告
1 . 电量分析报告 :
① 报告内容 : 该报告中分析的是整个系统的各个硬件模块的耗电量 , 不是针对某一个应用的报告 ;
② 起始时间 : 从调用 adb shell dumpsys batterystats --reset 方法重置电池状态开始 ;
③ 终止时间 : 到调用 adb bugreport bugreport.zip 导出电量报告结束 ;
2 . 报告中的各项指标 :
Reboot : 重启 ;
CPU running : CPU 运行耗电量 ; 这个一般是一直再运行耗电的 , 无法分析出是哪个 APP 消耗了多少 CPU ;
Userspace wakelock ( all ) : 用户拿到 wakelock , 保持屏幕不息屏的状态 ;
Screen : 屏幕耗电 , 没有耗电的状态 , 说明屏幕处于息屏状态 , 有耗电 , 说明屏幕处于唤醒状态 ;
Plugged : 是否处于充电状态 ;
黑色的线 : 表示电量值 , 0 ~ 100% , 使用时一直在掉 , 充电时 , 一直在提高 ;
Battery Level : 每消耗 1% 的电量 , 提示一次 ; 可以判断每 1% 的电量使用了多长时间 ;
3 . 查看指定应用的耗电量 : 在 App Selection 中选择对应的应用进程 ID , 可以查看指定应用的电量消耗 ;
四、电量优化三原则
电量优化三原则 :
① 减少操作 : 减少后台处理的次数 , 减少多于操作 ; 如下载数据时 , 如果有缓存数据 , 使用缓存数据 , 尽量少启用 WIFI 或 5G 模块 , 蓝牙连接时 , 记住蓝牙地址 , 尝试直接连接这个蓝牙 , 不要每次都启动蓝牙搜索 , 该操作功耗巨大 ;
② 推迟操作 : 有些操作是否可以在充电时完成 , 如软件更新 , 数据备份云端等 , 获取最新版本号 , 缓存云端数据 , 尽量都在插着数据线时进行 ; 能充电时执行就在充电时执行 , 能在 WIFI 执行 , 就不再 5G 情况下执行 ;
③ 合并操作 : 将启用硬件设备模块的操作 , 集中执行 , 如获取位置 , 上传下载 , 一次启动硬件模块 , 密集执行多个任务 , 不要隔一段时间唤醒一次 , 只执行单个工作 ;
五、电量优化注意事项
电量优化注意事项 :
① Wakelock 尽量少的使用 , 使用 JobScheduler / Alarm 替代前者 ;
② 硬件及时释放 : 对于硬件设备的调用请求 , 使用完毕后及时关闭 , 如 GPS , 蓝牙 , WIFI 等模块 , 不要长时间处于激活状态 , 用完就关闭释放 ;
③ 任务执行环境优先级 : 某些不是很着急的任务 , 尽量在充电状态下执行 , 充电 > 不充电 , WIFI > 2G/3G/4G/5G ;