Google is committed to advancing racial equity for Black communities. See how.
หน้านี้ได้รับการแปลโดย Cloud Translation API
Switch to English

สุขภาพของ Android

Android 9 ประกอบด้วย android.hardware.health HAL 2.0 ซึ่งเป็นเวอร์ชันหลักที่อัปเกรดจาก health@1.0 HAL HAL ใหม่นี้มีข้อดีดังต่อไปนี้:

  • การแยกที่สะอาดกว่าระหว่างกรอบงานและรหัสผู้ขาย
  • เลิกใช้งาน healthd daemon ที่ไม่จำเป็น
  • อิสระในการปรับแต่งผู้ขายในรายงานข้อมูลสุขภาพ
  • ข้อมูลสุขภาพของอุปกรณ์มากกว่าแค่แบตเตอรี่

Android 11 ประกอบด้วย android.hardware.health HAL 2.1 ซึ่งเป็นเวอร์ชันรองจาก health@2.0 HAL HAL ใหม่นี้มีข้อดีดังต่อไปนี้:

  • ใช้งานได้ง่ายขึ้น
  • สอดคล้องกับ 2.0 HAL API ที่มีอยู่
  • การแยกเสียงแหลมที่ดีขึ้นในรหัสการชาร์จนอกโหมด
  • การสนับสนุนที่ดีขึ้นสำหรับเฟรมเวิร์กเพื่อบ่งชี้ความสมบูรณ์ของแบตเตอรี่ของอุปกรณ์

ข้อกำหนด

อุปกรณ์ที่เปิดตัวด้วย Android 9 ต้องมี 2.0 HAL (และต้องไม่มี 1.0 HAL) อุปกรณ์ที่ไม่ได้เปิดตัวด้วย Android 9 แต่วางแผนที่จะอัปเดตอิมเมจของผู้จำหน่ายเป็น Target Framework Compatibility Matrix เวอร์ชัน 3 (เผยแพร่ใน Android 9) จะต้องลบการใช้งาน 1.0 HAL ที่มีอยู่และให้ 2.0 HAL

อุปกรณ์ที่เปิดตัวด้วย Android 11 จะต้องมี 2.1 HAL (และต้องไม่มี 1.0 หรือ 2.0 HAL) อุปกรณ์ที่ไม่ได้เปิดตัวด้วย Android 11 แต่วางแผนที่จะอัปเดตอิมเมจของผู้จำหน่ายเป็น Target Framework Compatibility Matrix เวอร์ชัน 5 (เผยแพร่ใน Android 11) ต้องลบการใช้งาน 2.0 HAL ที่มีอยู่และระบุ 2.1 HAL อุปกรณ์ที่ไม่ได้เปิดตัวด้วย Android 11 และไม่ได้วางแผนที่จะอัปเดตอิมเมจของผู้จำหน่ายขอแนะนำให้ระบุ 2.1 HAL

AOSP มีไลบรารีตัวช่วยหลายตัวที่ออกแบบมาเพื่อช่วยให้คุณใช้ 2.1 HAL และการเปลี่ยนจาก 1.0 HAL รุ่นเก่า

คำศัพท์

  • health@1.0 : ตัวย่อของ android.hardware.health@1.0 หมายถึงสุขภาพ HIDL HAL เวอร์ชัน 1.0 ที่เผยแพร่ใน Android 8.0
  • health@2.0 : ตัวย่อของ android.hardware.health@2.0 หมายถึงสุขภาพ HIDL HAL เวอร์ชัน 2.0 ที่เปิดตัวใน Android 9
  • health@2.1 : ตัวย่อของ android.hardware.health@2.1 หมายถึงสุขภาพ HIDL HAL เวอร์ชัน 2.1 ที่เผยแพร่ใน Android 11
  • เครื่องชาร์จ : เรียกใช้งานได้ในการชาร์จนอกโหมดที่แสดงภาพเคลื่อนไหวการชาร์จโทรศัพท์
  • การกู้คืน : ปฏิบัติการทำงานในโหมดการกู้คืนที่ต้องดึงข้อมูลแบตเตอรี่
  • healthd : daemon ดั้งเดิมที่ทำงานใน Android ซึ่งดึงข้อมูลที่เกี่ยวข้องกับสุขภาพและส่งไปยังเฟรมเวิร์ก
  • storaged : daemon ที่ทำงานใน Android ซึ่งดึงข้อมูลหน่วยเก็บข้อมูลและจัดเตรียมให้กับเฟรมเวิร์ก

สุขภาพใน Android 8.x

ใน Android 8.x ส่วนประกอบสุขภาพจะทำงานตามรายละเอียดในแผนภาพต่อไปนี้:

สุขภาพใน Android 8.x

รูปที่ 1 . สุขภาพใน Android 8.x

ในแผนภาพนี้:

  • เฟรมเวิร์กใช้การเรียก binder หนึ่ง (1) ครั้งและการเรียก hwbinder หนึ่ง (1) ครั้งเพื่อสื่อสารกับฮาร์ดแวร์
  • healthd คงลิงก์ไปยัง libhealthd_android , libbatterymonitor และ libbatteryservice
  • health@1.0-impl ลิงก์แบบคงที่ไปยัง libhealthd. BOARD

แต่ละบอร์ดสามารถปรับแต่ง libhealthd. BOARD แตกต่างกัน libhealthd. BOARD ; จะถูกกำหนดในเวลาสร้างว่าที่ชาร์จ health@1.0-impl และลิงค์การกู้คืนไปยัง

สำหรับโหมดอื่น ๆ :

โหมดการชาร์จและการกู้คืนนอกโหมดใน Android 8.x

รูปที่ 2. สุขภาพใน Android 8.x โหมดการชาร์จและการกู้คืนนอกโหมด

  • เครื่องชาร์จลิงก์แบบคงที่ไปยัง libhealthd. BOARD , libhealthd_charger และ libbatterymonitor
  • การกู้คืนลิงก์แบบคงที่ไปยัง libhealthd. BOARD และ libbatterymonitor

สุขภาพใน Android 9

ใน Android 9 ส่วนประกอบสุขภาพจะทำงานตามรายละเอียดในแผนภาพต่อไปนี้: สุขภาพใน Android 9

รูปที่ 3 . สุขภาพใน Android 9

เฟรมเวิร์กพยายามดึงข้อมูลบริการ hwservicemanager จาก hwservicemanager หากล้มเหลวจะเรียกเข้าไปที่ health@1.0 (ใน Android 8.x) เส้นทางรหัสเดิมจะถูกเก็บไว้เพื่อให้อิมเมจระบบ Android 9 เข้ากันได้กับอิมเมจผู้จำหน่าย Android 8.x เฟรมเวิร์กไม่ดึงข้อมูลจาก HAL ทั้งสองเนื่องจากมีเพียงเวอร์ชันบริการเดียว (1.0 หรือ 2.0) เท่านั้นที่สามารถมีอยู่ในอุปกรณ์

สำหรับโหมดอื่น ๆ :

การสร้างแผนภูมิและการกู้คืนนอกโหมดใน Android 9

รูปที่ 4. สุขภาพใน Android 9 โหมดการชาร์จและการกู้คืนนอกโหมด

สุขภาพใน Android 11

ใน Android 11 ส่วนประกอบสุขภาพจะทำงานตามรายละเอียดในแผนภาพต่อไปนี้:

[system]
    | getService()
    V
[health@2.1-service]
        | getService(stub=true)
        V
[      health@2.0-impl-2.1-<device>.so      ]
        |                                  | (device-dependent linkage)
        V                                  V
+---------Helper libs for impl--------+   [libhealthd.device]
| [libhealthloop (uevent, wakealarm)] |
| [libhealth2impl (IHealth impl)    ] |
| [libbatterymonitor (battery)      ] |
+-------------------------------------+

หากไม่มีการใช้งาน health 2.1 ระบบจะกลับไปที่เส้นทางรหัสเดิมตามที่อธิบายไว้ในส่วนก่อนหน้า

สำหรับโหมดอื่น ๆ :

[       charger          ]
    | getService()      |  (legacy code path)
    V                   +-------------------------------------------------+
[health@2.1-service]                                                      |
        | getService(stub=true)                                           |
        V                                                                 |
[      health@2.0-impl-2.1-<device>.so      ]                             |
        |                                  | (device-dependent linkage)   |
        V                                  V                              |
+---------Helper libs for impl--------+   [libhealthd.device]             |
| [libhealthloop (uevent, wakealarm)] |                                   |
| [libhealth2impl (IHealth impl)    ] | <---------------------------------+
| [libbatterymonitor (battery)      ] |
+-------------------------------------+
[recovery]
        | getService() w/o hwservicemanager
        V
[      health@2.0-impl-2.1-<device>.so      ]
        |                                  | (device-dependent linkage)
        V                                  V
+---------Helper libs for impl--------+   [libhealthd.device]
| [libhealthloop (uevent, wakealarm)] |
| [libhealth2impl (IHealth impl)    ] |
| [libbatterymonitor (battery)      ] |
+-------------------------------------+

อินเทอร์เฟซ HAL 2.0

health@2.0 HAL จัดเตรียมฟังก์ชันการทำงานเดียวกันกับเฟรมเวิร์กเช่นเดียวกับ healthd daemon แบบเก่า นอกจากนี้ยังมี API ที่คล้ายกับที่ healthd ให้ไว้ก่อนหน้านี้เป็นบริการ binder (เช่น IBatteryPropertiesRegistrar )

อินเทอร์เฟซหลัก IHealth มีฟังก์ชันดังต่อไปนี้:

  • registerCallback เพื่อแทนที่ IBatteryPropertiesRegistrar.registerListener
  • unregisterCallback เพื่อแทนที่ IBatteryPropertiesRegistrar.unregisterListener
  • update เพื่อแทนที่ IBatteryPropertiesRegistrar.scheduleUpdate
  • IBatteryPropertiesRegistrar.getProperties ถูกแทนที่ด้วยสิ่งต่อไปนี้:
    • getChargeCounter
    • getCurrentNow
    • getCurrentAverage
    • getCapacity
    • getEnergyCounter
    • getChargeStatus
    • getHealthInfo

นอกจากนี้ IHealth ยังมี API ใหม่ต่อไปนี้สำหรับการ storaged เพื่อดึงข้อมูลที่เกี่ยวข้องกับการจัดเก็บข้อมูลเฉพาะผู้จำหน่าย:

  • getStorageInfo
  • getDiskStats

โครงสร้างใหม่ @2.0::HealthInfo ถูกส่งคืนผ่านการโทรกลับและ getHealthInfo โครงสร้างนี้มีข้อมูลความสมบูรณ์ของอุปกรณ์ทั้งหมดที่มีอยู่ผ่าน health@2.0 HAL รวมถึง:

  • ข้อมูลการชาร์จ (AC / USB / ไร้สายกระแสไฟฟ้าแรงดันไฟฟ้า ฯลฯ )
  • ข้อมูลแบตเตอรี่ (สถานะแบตเตอรี่กระแสไฟฟ้าแรงดันประจุเทคโนโลยี ฯลฯ )
  • ข้อมูลการจัดเก็บ (ข้อมูลอุปกรณ์จัดเก็บข้อมูลสถิติดิสก์)

อินเทอร์เฟซ HAL 2.1

health@2.1 HAL รองรับการชาร์จนอกโหมดและให้ข้อมูลเพิ่มเติมเกี่ยวกับแบตเตอรี่

อินเทอร์เฟซหลัก IHealth มีฟังก์ชันเพิ่มเติมดังต่อไปนี้

  • getHealthConfig : เพื่อดึงการกำหนดค่าของ HAL นี้
  • getHealthInfo_2_1 : เวอร์ชันรองอัปเกรดเป็น getHealthInfo
  • shouldKeepScreenOn : เพื่อกำหนดว่าควรเปิดหน้าจอไว้ในโหมดชาร์จหรือไม่

นอกจากนี้การใช้งาน @2.1::IHealth จำเป็นต้องสนับสนุน @2.1::IHealthInfoCallback สำหรับฟังก์ชัน registerCallback และ unregisterCallback สืบทอดมา ผลตอบแทนที่อินเตอร์เฟซการเรียกกลับข้อมูลสุขภาพสุขภาพใหม่ให้กับลูกค้าโดยใช้ของ healthInfoChanged_2_1 ฟังก์ชั่นแทนการรับมรดก healthInfoChanged ฟังก์ชั่น

โครงสร้างใหม่ @2.1::HealthInfo ถูกส่งคืนผ่านการโทรกลับและ getHealthInfo_2_1 โครงสร้างนี้มีข้อมูลความสมบูรณ์ของอุปกรณ์เพิ่มเติมที่มีให้ทาง health@2.0 HAL ได้แก่ :

  • ระดับความจุของแบตเตอรี่
  • เวลาในการชาร์จแบตเตอรี่จนเต็มในขณะนี้ (เป็นวินาที)
  • ความจุในการออกแบบการชาร์จแบตเตอรี่เต็ม (เป็นμAh)

สำหรับข้อมูลเกี่ยวกับการนำบริการสุขภาพไปใช้โปรดดู การนำสุขภาพ ไปใช้