耗电量场景
主要的耗电场景有:
- cpu:复杂的运算逻辑、死循环等会直接导致CPU负载过高,会导致耗电;
- wakelock:只要有应用拿到wakelock这个锁,系统就无法进入睡眠状态。频繁wakelock或者申请了wakelock没有释放,会导致耗电;
- wifiscan和wifilock:wifiscan和wifilock也会导致手机的wifi模块处于激活状态,频繁的wifiscan或者wifilock不释放,会导致耗电;
- sensor:传感器打开后会导致系统持续监听设备外围环境的数据变化,使用后不及时关闭,会导致耗电;
- network:大量的数据传输,或者长时间的移动网络数据传输导致radio长期处于活跃状态,会导致耗电;
- gps:gps也是一种传感器,定位中没有及时关闭,会导致耗电
业务层面,用户最核心基础的模块:
- 新增的基础逻辑,倘若入口明显,潜在较大访问,必须保证性能;
- 活动需要,因为活动上新的逻辑,存在较大的用户访问,需尽力提升用户体验;
- 反馈体验不好的模块
耗电量优化方向
- 尽量让CPU休眠
- 避免无端电量消耗
实践:
- 根据电池电量与充电状态调整应用更新频率
- 根据网络连接状态调整应用更新频率;提前判断网络状态,网络不可用时,尽早进入异常处理逻辑
- 根据当前设备状态停用不需要的接收器
- JobScheduler批量执行唤醒任务
- 离开当前界面【activity、fragment、tab、webpage】,减少耗电活动:动画、网络请求、定位、传感器等
- 优化后台逻辑,防止频繁唤醒
- 优化定位逻辑
- 避免H5页面的耗电
- 预取数据
- 批量处理传送和连接
- 减少连接
监控工具
收集电量信息
#kill adb服务
adb kill-server
#重启adb服务
adb start-server
#设置,目的:依照时间顺序展示各个wakelock的详细信息
adb shell dumpsys batterystats --enable full-wake-history
#重置batterystats数据
adb shell dumpsys batterystats --reset
#执行测试用例
#完成测试用例执行,连接设备,导出数据
adb shell dumpsys batterystats > bugreport.txt
#Android 7.0及以上
adb bugreport bugreport.zip
#Android 6.0及以下
adb bugreport > bugreport.txt
Battery Historian工具分析【安卓8.0以下】:https://www.jianshu.com/p/2f144bf7fe51
Android Studio --Energy Profiler监控【安卓8.0及以上】:https://www.jianshu.com/p/2ec8449051b9