Android P battery health overview
Android 运行状况
Android 9 引入了从 [email protected] HAL 升级的主要版本 android.hardware.health
HAL 2.0。新版 HAL 具有以下优势:
- 框架代码和供应商代码之间的区别更清楚。
- 弃用了不必要的
healthd
守护进程。 - 供应商对运行状况信息报告进行自定义的自由度更高。
- 更多设备运行状况信息(不仅包括电池信息)。
要求
搭载 Android 9 的设备必须提供 2.0 HAL(而不得提供 1.0 HAL)。未搭载 Android 9 但计划将供应商映像更新为 Target Framework Compatibility Matrix 版本 3(Android 9 中发布的版本)的设备必须移除现有的 1.0 HAL 实现,并提供 2.0 HAL。
AOSP 包含多个辅助程序库,旨在帮助您实现 2.0 HAL 以及完成从旧版 1.0 HAL 的过渡。
术语
-
[email protected]:
[email protected]
的缩写,指的是 Android 8.0 中发布的运行状况 HIDL 的 1.0 版 HAL。 -
[email protected]:
[email protected]
的缩写,指的是 Android 9 中发布的运行状况 HIDL 的 2.0 版 HAL。 - charger:在关机模式充电过程中运行的可执行文件,用于显示手机充电动画。
- recovery:在恢复模式下运行的可执行文件,必须检索电池信息。
- healthd:在 Android 中运行的旧版守护进程,用于检索与运行状况相关的信息并将其提供给框架。
- storaged:在 Android 中运行的守护进程,用于检索存储信息并将其提供给框架。
Android 8.x 中的“运行状况”服务
在 Android 8.x 中,运行状况组件的工作原理详情如下图所示:
图 1. Android 8.x 中的“运行状况”服务
在此图中:
- 框架通过一 (1) 次 Binder 调用和一 (1) 次 hwbinder 调用与硬件进行通信。
-
healthd
静态链接到libhealthd_android
、libbatterymonitor
和libbatteryservice
。 -
[email protected] 静态关联到
libhealthd.BOARD
。
每个开发板都可以自定义不同的 libhealthd.BOARD
;charger、[email protected] 和 recovery 关联到哪个开发板是在编译时确定的。
对于其他模式:
图 2. Android 8.x 中的运行状况、关机模式充电和恢复模式
- charger 静态关联到
libhealthd.BOARD
、libhealthd_charger
和libbatterymonitor
。 - recovery 静态关联到
libhealthd.BOARD
和libbatterymonitor
。
Android 9 中的“运行状况”服务
在 Android 9 中,运行状况组件的工作原理详情如下图所示:
图 3. Android 9 中的“运行状况”服务
该框架尝试从 hwservicemanager
中检索 [email protected] 服务。如果检索失败,它将调用 [email protected](在 Android 8.x 中提供)。同时,它还会保留原有代码路径,以便 Android 9 系统映像与 Android 8.x 供应商映像兼容。框架不会同时从两个 HAL 中检索信息,因为设备上只能存在一个服务版本(1.0 或 2.0)。
注意:对于原有代码路径,进程/库将一直保留到 [email protected] 被弃用。
对于其他模式:
图 4. Android 9 中的运行状况、关机模式充电和恢复模式
HAL 接口
[email protected] HAL 为框架提供了与旧版 healthd 守护进程相同的功能。此外,它还提供了与 healthd 以前作为 Binder 服务提供的 API 类似的 API(即 IBatteryPropertiesRegistrar)。
主界面 IHealth 提供以下函数:
-
registerCallback
,用于替换IBatteryPropertiesRegistrar.registerListener
-
unregisterCallback
,用于替换IBatteryPropertiesRegistrar.unregisterListener
-
update
,用于替换IBatteryPropertiesRegistrar.scheduleUpdate
-
IBatteryPropertiesRegistrar.getProperties
将由以下内容替换:getChargeCounter
getCurrentNow
getCurrentAverage
getCapacity
getEnergyCounter
getChargeStatus
getHealthInfo
此外,IHealth
还为 storaged
提供了以下新 API,以检索特定于供应商的存储相关信息:
getStorageInfo
getDiskStats
通过回调和 getHealthInfo
返回一个新结构 @2.0::HealthInfo
,此结构包含可通过 [email protected] HAL 访问的所有设备运行状况信息,包括:
- 充电信息(交流电/USB/无线、电流、电压等)
- 电池信息(状态、电池电量、电流、电压、充电、技术等)
- 存储信息(存储设备信息、磁盘统计信息)
要详细了解如何实现“运行状况”服务,请参阅实现“运行状况”。