เฟรมเวิร์ก Android ช่วยให้ผู้ผลิตอุปกรณ์และนักพัฒนาแอปใช้ข้อมูลความร้อนเพื่อมอบประสบการณ์ของผู้ใช้ (UX) ที่สอดคล้องกันได้หากอุปกรณ์เริ่มร้อนเกินไป เช่น เมื่อระบบมีความร้อนสูง
jobscheduler
งานจะถูกจำกัด และหากจำเป็น ระบบจะเริ่มการปิดเครื่อง
เนื่องจากความร้อนของเฟรมเวิร์ก แอปที่ได้รับการแจ้งเตือนเกี่ยวกับความร้อนสูง
ผ่านการเรียกกลับที่ลงทะเบียนไว้ในคลาส PowerManager
จะปรับ UX ได้อย่างราบรื่น
HAL ความร้อน
Android 9 และเวอร์ชันที่ต่ำกว่าจะใช้อินเทอร์เฟซการสำรวจที่กำหนดไว้ใน Thermal HAL 1.0 เพื่อรับค่าอุณหภูมิ HAL นี้ช่วยให้เฟรมเวิร์ก Android และไคลเอ็นต์ที่เชื่อถืออื่นๆ เช่น HAL ของผู้ผลิตอุปกรณ์ อ่าน อุณหภูมิปัจจุบันและเกณฑ์การควบคุมและการปิดระบบที่เฉพาะเจาะจงตามนโยบายผลิตภัณฑ์ สำหรับเซ็นเซอร์แต่ละตัวผ่าน API เดียวกันได้
Android 10 ได้เปิดตัวระบบความร้อนในเฟรมเวิร์ก Android และ HAL เวอร์ชันใหม่ ซึ่งก็คือ Thermal HAL 2.0 ที่แยกอินเทอร์เฟซไปยังอุปกรณ์ฮาร์ดแวร์ของระบบย่อยความร้อน อินเทอร์เฟซฮาร์ดแวร์ประกอบด้วยเซ็นเซอร์อุณหภูมิและเทอร์มิสเตอร์สำหรับผิวหนัง แบตเตอรี่ GPU, CPU และพอร์ต USB อุณหภูมิผิวหนังของอุปกรณ์เป็นระบบที่สำคัญที่สุดในการติดตามเพื่อรักษาอุณหภูมิพื้นผิวของอุปกรณ์ ให้อยู่ภายในขีดจำกัดความร้อนที่ระบุ
นอกจากนี้ Thermal HAL 2.0 ยังให้ข้อมูลการอ่านค่าเซ็นเซอร์ความร้อนและระดับความรุนแรงที่เกี่ยวข้องแก่ไคลเอ็นต์หลายรายเพื่อระบุความเครียดจากความร้อน
รูปต่อไปนี้แสดงข้อความเตือน 2 รายการจาก UI ของระบบ Android
ข้อความเหล่านี้จะแสดงเมื่ออินเทอร์เฟซการเรียกกลับ IThermalEventListener
สำหรับเซ็นเซอร์USB_PORT
และSKIN
ตามลำดับ มีระดับความรุนแรงถึงTHERMAL_STATUS_EMERGENCY
รูปที่ 1 คำเตือนเรื่องความร้อนสูงเกินไป
ระบบจะดึงอุณหภูมิปัจจุบันสำหรับเซ็นเซอร์ความร้อนประเภทต่างๆ ผ่าน IThermal HAL การเรียกใช้ฟังก์ชันแต่ละครั้ง
จะแสดงค่าสถานะเป็น SUCCESS
หรือ FAILURE
หากระบบแสดงผล SUCCESS
กระบวนการจะดำเนินต่อไป หากระบบแสดงผล FAILURE
ระบบจะส่งข้อความแสดงข้อผิดพลาดที่ต้องอ่านได้ให้status.debugMessage
นอกเหนือจากเป็นอินเทอร์เฟซการสำรวจที่แสดงอุณหภูมิปัจจุบันแล้ว
คุณยังใช้การเรียกกลับ
IThermalChangedCallback
(HIDL, Android 10 ถึง 13) หรือ
IThermalChangedCallback
(AIDL, Android 14 ขึ้นไป)
กับอินเทอร์เฟซการเรียกกลับจากไคลเอ็นต์ HAL ความร้อน เช่น
บริการความร้อนของเฟรมเวิร์กได้ เช่น RegisterIThermalChangedCallback
และ
UnregisterIThermalChangedCallback
เพื่อลงทะเบียนหรือยกเลิกการลงทะเบียนเหตุการณ์ที่มีการเปลี่ยนแปลงความรุนแรง
หากความรุนแรงของความร้อนของเซ็นเซอร์ที่ระบุมีการเปลี่ยนแปลง
notifyThrottling
จะส่งการเรียกกลับของเหตุการณ์การควบคุมปริมาณความร้อนไปยังเครื่องมือฟังเหตุการณ์ความร้อน
นอกจากข้อมูลเซ็นเซอร์ความร้อนแล้ว รายการอุปกรณ์ทำความเย็นที่ลดผลกระทบ
จะแสดงใน getCurrentCoolingDevices
ด้วย ลำดับของรายการนี้จะยังคงอยู่ แม้ว่าอุปกรณ์ระบายความร้อนจะออฟไลน์ไปแล้วก็ตาม ผู้ผลิตอุปกรณ์สามารถใช้รายการนี้เพื่อ
รวบรวมเมตริก statsd
ดูข้อมูลเพิ่มเติมได้ที่การติดตั้งใช้งานอ้างอิง
แม้ว่าคุณจะเพิ่มส่วนขยายของคุณเองได้ แต่ก็ไม่ควรปิดใช้ฟังก์ชันการลดความร้อน
บริการด้านความร้อน
ใน Android 10 ขึ้นไป บริการระบายความร้อนในเฟรมเวิร์กจะตรวจสอบอย่างต่อเนื่องโดยใช้สัญญาณการลดความร้อนต่างๆ จาก Thermal HAL 2.0 และให้ความคิดเห็นเกี่ยวกับความรุนแรงของการควบคุมความเร็วแก่ไคลเอ็นต์ ไคลเอ็นต์เหล่านี้รวมถึงคอมโพเนนต์ภายใน
และแอป Android บริการนี้ใช้อินเทอร์เฟซ Binder Callback 2 รายการ ได้แก่
IThermalEventListener
และ IThermalStatusListener
ซึ่งแสดงเป็น Callback โดย
แบบแรกมีไว้สำหรับใช้ภายในแพลตฟอร์มและผู้ผลิตอุปกรณ์ ส่วนแบบหลังมีไว้สำหรับ
แอป Android
อินเทอร์เฟซการเรียกกลับช่วยให้ดึงสถานะความร้อนปัจจุบันของอุปกรณ์ได้เป็นค่าจำนวนเต็มตั้งแต่ 0x00000000
(ไม่มีการควบคุมปริมาณ) ถึง
0x00000006
(ปิดอุปกรณ์) มีเพียงบริการของระบบที่เชื่อถือได้ เช่น Android API หรือ API ของผู้ผลิตอุปกรณ์เท่านั้นที่เข้าถึงข้อมูลเซ็นเซอร์ความร้อนและเหตุการณ์ความร้อนแบบละเอียดได้ รูปต่อไปนี้แสดงโมเดลของ
ขั้นตอนการลดความร้อนใน Android 10 ขึ้นไป
รูปที่ 2 ขั้นตอนการลดความร้อนใน Android 10 ขึ้นไป
หลักเกณฑ์ของผู้ผลิตอุปกรณ์
หากต้องการรายงานเซ็นเซอร์อุณหภูมิของอุปกรณ์และสถานะการควบคุมปริมาณสำหรับ Android 10 ถึง 13 ผู้ผลิตอุปกรณ์ต้องใช้ลักษณะ HIDL ของ Thermal HAL 2.0 (IThermal.hal
)
หากต้องการรายงานเซ็นเซอร์อุณหภูมิของอุปกรณ์และสถานะการควบคุมปริมาณสำหรับ Android
14 ผู้ผลิตอุปกรณ์ต้องใช้แง่มุม AIDL
ของ Thermal HAL 2.0 (IThermal.aidl
)
ต้องรายงานทุกอย่างที่จำกัดประสิทธิภาพของอุปกรณ์ รวมถึงข้อจำกัดด้านพลังงานแบตเตอรี่ ผ่าน HAL ความร้อน เพื่อให้มั่นใจว่าการดำเนินการนี้จะเกิดขึ้น ให้ใส่เซ็นเซอร์ทั้งหมดที่อาจบ่งบอกถึงความจำเป็นในการลดความร้อน (อิงตามการเปลี่ยนแปลงสถานะ ) ลงใน HAL ความร้อน และรายงานความรุนแรงของการดำเนินการลดความร้อน ที่ดำเนินการ ค่าอุณหภูมิที่แสดงผลจากการอ่านค่าเซ็นเซอร์ไม่จำเป็นต้องเป็นอุณหภูมิจริง ตราบใดที่ค่าดังกล่าวแสดงถึงเกณฑ์ความรุนแรงที่เกี่ยวข้องอย่างถูกต้อง เช่น คุณสามารถส่งค่าตัวเลขที่แตกต่างกันแทนค่าเกณฑ์อุณหภูมิจริง หรือสร้างการป้องกันขอบเขตในข้อกำหนดเกณฑ์เพื่อระบุฮิสเทอรีซิส อย่างไรก็ตาม ความรุนแรงที่สอดคล้องกับค่านั้นต้องตรงกับสิ่งที่จำเป็นที่ เกณฑ์นั้น ตัวอย่างเช่น คุณอาจตัดสินใจที่จะแสดงผล 72°C เป็น เกณฑ์อุณหภูมิวิกฤต เมื่ออุณหภูมิจริงอยู่ที่ 65°C และสอดคล้องกับระดับความรุนแรงวิกฤตที่คุณระบุ ระดับความรุนแรง ต้องถูกต้องเพื่อให้ฟังก์ชันการทำงานของเฟรมเวิร์กความร้อนดีที่สุด
ดูข้อมูลเพิ่มเติมเกี่ยวกับระดับเกณฑ์ในเฟรมเวิร์กและวิธีที่ระดับเกณฑ์ สอดคล้องกับการดำเนินการบรรเทาผลกระทบได้ที่ ใช้รหัสสถานะความร้อน
ใช้ API ความร้อน
แอปสามารถเพิ่มและนำ Listener ออก รวมถึงเข้าถึงข้อมูลสถานะความร้อนผ่านคลาส PowerManager
ได้
อินเทอร์เฟซ IThermal
มีฟังก์ชันทั้งหมดที่จำเป็น รวมถึง
การแสดงค่าสถานะความร้อน
อินเทอร์เฟซ IThermal binder
จะได้รับการห่อหุ้มเป็นอินเทอร์เฟซ OnThermalStatusChangedListener
ซึ่งแอปสามารถใช้ได้
เมื่อลงทะเบียนหรือนำเครื่องมือฟังสถานะความร้อนออก
API ความร้อนของ Android มีทั้งวิธีการเรียกกลับและการสำรวจเพื่อให้แอปได้รับการแจ้งเตือนเกี่ยวกับระดับความรุนแรงของความร้อนผ่านรหัสสถานะ ซึ่งกำหนดไว้ในคลาส PowerManager
วิธีการมีดังนี้
getCurrentThermalStatus()
แสดงผลสถานะความร้อนปัจจุบันของอุปกรณ์เป็นจำนวนเต็ม เว้นแต่ อุปกรณ์จะอยู่ระหว่างการควบคุมปริมาณการใช้งานaddThermalStatusListener()
เพิ่ม ListenerremoveThermalStatusListener()
นำผู้ฟังที่เพิ่มไว้ก่อนหน้านี้ออก
ใช้รหัสสถานะความร้อน
รหัสสถานะความร้อนจะแปลเป็นระดับการควบคุมปริมาณที่เฉพาะเจาะจง ซึ่งคุณสามารถ
ใช้เพื่อรวบรวมข้อมูลและออกแบบ UX ที่ดีที่สุดได้ ตัวอย่างเช่น แอปอาจได้รับสถานะ 0x00000000
(THERMAL_STATUS_NONE
) ซึ่งอาจเปลี่ยนเป็น 0x00000001
(THERMAL_STATUS_LIGHT
) ในภายหลัง การทำเครื่องหมายสถานะ 0x00000000
เป็น t0 แล้ววัดเวลาที่ผ่านไปจากสถานะ THERMAL_STATUS_NONE
เป็นสถานะ THERMAL_STATUS_LIGHT
เป็น t1 จะช่วยให้ผู้ผลิตอุปกรณ์ออกแบบและทดสอบกลยุทธ์การลดความเสี่ยงสำหรับกรณีการใช้งานที่เฉพาะเจาะจงได้ ตารางต่อไปนี้แสดงวิธีที่แนะนำในการใช้รหัสสถานะความร้อน
รหัสสถานะความร้อน | คำอธิบายและการใช้งานที่แนะนำ |
---|---|
THERMAL_STATUS_NONE (0x00000000 ) |
ไม่มีการควบคุม ใช้สถานะนี้เพื่อดำเนินการป้องกัน เช่น ตรวจหาจุดเริ่มต้นของระยะเวลา (t0 ถึง t1) จาก THERMAL_STATUS_NONE (0 ) ถึง THERMAL_STATUS_LIGHT (1 ) |
THERMAL_STATUS_LIGHT (0x00000001 ) |
การควบคุมปริมาณการใช้แสง UX จะไม่ได้รับผลกระทบ ใช้การลดผลกระทบของอุปกรณ์อย่างค่อยเป็นค่อยไปสำหรับขั้นตอนนี้ เช่น ข้ามการเพิ่มประสิทธิภาพหรือใช้ความถี่ที่ไม่มีประสิทธิภาพ แต่เฉพาะในคอร์ขนาดใหญ่ |
THERMAL_STATUS_MODERATE (0x00000002 ) |
การจำกัดอัตราปานกลาง UX ไม่ได้รับผลกระทบมากนัก การลดความร้อนจะส่งผลต่อกิจกรรมในเบื้องหน้า ดังนั้นแอปควรลดการใช้พลังงานทันที |
THERMAL_STATUS_SEVERE (0x00000003 ) |
การจำกัดอัตราอย่างรุนแรง UX ได้รับผลกระทบอย่างมาก ในขั้นตอนนี้ การลดความร้อนของอุปกรณ์ควรจำกัดความจุของระบบ สถานะนี้อาจทำให้เกิดผลข้างเคียง เช่น การแสดงผลกระตุกและเสียงขาดหาย |
THERMAL_STATUS_CRITICAL (0x00000004 ) |
แพลตฟอร์มได้ทำทุกวิถีทางเพื่อลดการใช้พลังงาน ซอฟต์แวร์การลดความร้อนของอุปกรณ์ได้กำหนดให้ส่วนประกอบทั้งหมดทำงานที่ความจุต่ำสุด |
THERMAL_STATUS_EMERGENCY (0x00000005 ) |
ส่วนประกอบหลักในแพลตฟอร์มกำลังปิดตัวลงเนื่องจากสภาพความร้อนและฟังก์ชันการทำงานของอุปกรณ์ถูกจำกัด รหัสสถานะนี้แสดงถึงคำเตือนสุดท้ายก่อนที่อุปกรณ์จะปิด ในสถานะนี้ ฟังก์ชันบางอย่าง เช่น โมเด็มและอินเทอร์เน็ตมือถือ จะปิดโดยสมบูรณ์ |
THERMAL_STATUS_SHUTDOWN (0x00000006 ) |
ปิดเครื่องทันที เนื่องจากความรุนแรงของขั้นตอนนี้ แอปอาจไม่ได้รับการแจ้งเตือนนี้ |
ผู้ผลิตอุปกรณ์ต้องผ่านการทดสอบ VTS สำหรับ HAL ความร้อน และใช้ emul_temp
จากอินเทอร์เฟซ kernel sysfs
เพื่อจำลองการเปลี่ยนแปลงอุณหภูมิได้