跳到主要内容

耗电优化实战

场景

用户投诉 App 在后台持续耗电,电池消耗排名靠前。

排查与方案

1. 定位耗电来源

# 导出电量统计
adb shell dumpsys batterystats --reset
# 使用一段时间后
adb shell dumpsys batterystats > battery.txt
adb bugreport > bugreport.zip
# 用 Battery Historian 可视化分析
耗电来源排查方式
WakeLock 未释放dumpsys power 查活跃的 WakeLock
频繁网络请求抓包 or Network Profiler
GPS 持续定位dumpsys location
后台 Service 常驻dumpsys activity services
AlarmManager 过频dumpsys alarm

2. 优化方案

问题优化
WakeLock 泄漏try-finally 确保释放;设置超时
频繁网络轮询改 FCM 推送;合并请求
精确定位降低精度 PRIORITY_BALANCED_POWER_ACCURACY
后台 Service迁移到 WorkManager(系统统一调度,省电)
频繁 Alarm使用 setInexactRepeating,让系统合并唤醒
// ❌ 错误:精确定位 + 高频率
locationClient.requestLocationUpdates(
LocationRequest.create()
.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY)
.setInterval(1000) // 每秒一次
)

// ✅ 正确:平衡精度 + 合理频率
locationClient.requestLocationUpdates(
LocationRequest.create()
.setPriority(LocationRequest.PRIORITY_BALANCED_POWER_ACCURACY)
.setInterval(60_000) // 60 秒
.setFastestInterval(30_000)
)
Doze 模式适配

Android 6.0+ 的 Doze 模式会限制后台网络和 WakeLock。使用 WorkManager 替代自行管理的后台任务,系统会在维护窗口合并执行,大幅降低电量消耗。


面试答题要点

  1. 用 Battery Historian 分析,展示数据驱动
  2. 列举常见耗电来源及解决方案
  3. 强调 WorkManager 替代后台 Service
  4. 提到 Doze / App Standby 对后台任务的影响

相关链接