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_androidlibbatterymonitor 和 libbatteryservice
  • [email protected] 靜態關聯到 libhealthd.BOARD

每個開發板都可以自定義不同的 libhealthd.BOARD;charger、[email protected] 和 recovery 關聯到哪個開發板是在編譯時確定的。

對於其他模式:

 

圖 2. Android 8.x 中的運行狀況、關機模式充電和恢復模式

  • charger 靜態關聯到 libhealthd.BOARDlibhealthd_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/無線、電流、電壓等)
  • 電池信息(狀態、電池電量、電流、電壓、充電、技術等)
  • 存儲信息(存儲設備信息、磁盤統計信息)

要詳細瞭解如何實現“運行狀況”服務,請參閱實現“運行狀況”

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章