3. 电量消耗的度量与分析工具

在 Wear OS 上做电量优化,第一步不是“改代码”,而是“拿到可信的耗电证据”。手表电池容量通常只有 300~400mAh,一颗常驻传感器或一次高频唤醒就可能让续航从两天掉到一天。因此,本节围绕四类工具展开:Battery Historian 负责系统级电量归因,Systrace 负责 CPU 调度与唤醒时序,Perfetto 负责统一采集与跨进程追踪,Wear OS 专用功耗分析工具(如 Wear OS 上的 Battery Historian 变体、Android Studio Energy Profiler、以及厂商提供的功耗日志)负责把表端数据落到具体应用。理解它们各自“看什么、怎么采、怎么读”,比记住命令更重要。

一、Battery Historian:把电量拆成“谁用了多少”

Battery Historian 的核心价值是把一段时间的 batterystats 日志解析成时间轴和归因表。采集方式通常为:

adb shell dumpsys batterystats --reset
# 复现耗电场景,例如持续心率监测 30 分钟
adb shell dumpsys batterystats > batterystats.txt
adb shell dumpsys batterystats --history > batterystats_history.txt
# 或直接抓取 bugreport
adb bugreport bugreport.zip

把 bugreport.zip 上传到 Battery Historian 后,重点看三块:时间轴、设备状态、应用归因。时间轴上会叠加屏幕、Wi-Fi、GPS、传感器、唤醒锁、JobScheduler 等条带。若某应用在屏幕关闭后仍频繁出现 Wake lock 或 Sensor 条带,就说明它没有正确释放资源。归因表中 Estimated power use 会按 mAh 给出排名,但要注意:这是系统估算值,不是硬件实测值,适合做相对比较,不适合当作绝对功耗。

解读时抓住三个指标:唤醒次数、唤醒总时长、GPS/传感器使用时长。例如某表盘应用在 30 分钟内唤醒 120 次、累计持锁 18 分钟,而屏幕仅亮 2 分钟,这基本可以判定为后台唤醒失控。此时应结合 dumpsys alarm 和 dumpsys jobscheduler 查看具体触发源。

二、Systrace:看 CPU 调度与唤醒时序

Systrace 适合回答“谁在什么时候占用了 CPU、为什么设备没睡下去”。在 Wear OS 上采集:

python systrace.py -t 10 -o trace.html \
  sched freq idle am wm gfx view binder_driver \
  hal res sync power

生成的 HTML 中,每个 CPU 核是一条泳道,上方是进程/线程活动。重点观察:CPU 是否频繁从 idle 被拉起、是否有长时间高频率运行、SurfaceFlinger 与应用的帧调度是否对齐。如果看到某应用线程每 200ms 就唤醒一次,而业务上只需要 1 分钟一次,那就是典型的定时器过密。Systrace 的局限是采集窗口短、系统开销大,适合定位“瞬时抖动”,不适合长时间续航评估。

三、Perfetto:统一采集与跨进程追踪

Perfetto 是 Android 10 之后推荐的系统级追踪平台,支持长时间采集、SQL 查询和自定义 trace point。在 Wear OS 上可通过 record_android_trace 或设备端 perfetto 命令采集:

adb shell perfetto -o /data/misc/perfetto-traces/trace.pftrace -t 60s \
  -b 32mb sched freq idle am wm gfx view binder_driver hal res memory
adb pull /data/misc/perfetto-traces/trace.pftrace

Perfetto UI 中,除了看 CPU 和唤醒,还可以用 SQL 统计“每个进程的唤醒次数”和“传感器采样间隔”。例如查询 slice 表中 name LIKE '%sensor%' 的记录,能快速定位传感器采样频率。Perfetto 的优势在于:采集时间长、数据可查询、支持自定义 atrace 类别,适合把“电量问题”转化为可量化的时序数据。

Wear OS 电量分析工具链:采集 → 归因 → 时序 → 验证 Battery Historian • dumpsys batterystats • bugreport 上传 • 唤醒锁 / 传感器归因 • 估算 mAh 排名 看:谁在后台耗电 Systrace • atrace 类别 • CPU 泳道 / idle • 线程唤醒时序 • 短窗口高开销 看:谁在频繁唤醒 CPU Perfetto • 长时间 trace • SQL 查询 slice • 自定义 trace point • 跨进程关联 看:量化时序与频率 Wear OS 专用工具 • Energy Profiler • 厂商功耗日志 • 表端实时曲线 • 传感器/屏幕状态 看:应用级实时功耗 数据解读路径:从异常现象到根因 现象 1:待机掉电快 Battery Historian 显示 Wake lock 次数 > 80/30min 现象 2:运动时耗电高 Systrace 显示 GPS + 传感器线程频繁唤醒 现象 3:表盘卡顿且耗电 Perfetto 显示 帧调度与 CPU 频率不匹配 根因定位与验证 Battery Historian 定位“谁” → Systrace/Perfetto 定位“何时、多频繁” → 修改后重新采集对比唤醒次数与 mAh 估算值 验证标准:同一场景下唤醒次数下降 ≥ 50%,估算功耗下降 ≥ 20% 视为有效优化

四、Wear OS 专用功耗分析工具

Wear OS 与手机不同:屏幕常亮(AOD)、传感器常驻、蓝牙与 Wi-Fi 切换频繁。Android Studio 的 Energy Profiler 可以连接手表,实时查看 CPU、网络、GPS 和传感器的能耗曲线。它适合在开发阶段快速验证“某个功能是否异常耗电”。此外,部分厂商(如三星、出门问问)提供表端功耗日志,能给出更细的传感器采样与屏幕状态记录。使用这类工具时,建议固定场景:例如“关闭 AOD、开启心率、每 5 分钟同步一次数据”,采集 30 分钟,对比优化前后的曲线。

五、组合使用与判断依据

实际排障中,推荐顺序是:Battery Historian 先定位应用,Systrace/Perfetto 再定位时序,专用工具做实时验证。判断优化是否有效,不要只看“感觉”,而要看三个量化指标:同一场景下唤醒次数、传感器持有时长、估算 mAh。若唤醒次数下降 50% 以上、估算功耗下降 20% 以上,通常可认为优化有效。最后提醒:所有工具数据都受系统版本、厂商定制和采集开销影响,务必在相同条件下对比,避免把“采集本身的开销”误判为应用耗电。