เฟรมเวิร์ก 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 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 ความร้อน
แอปสามารถเพิ่มและนำโปรแกรมรับฟังออก รวมถึงเข้าถึงข้อมูลสถานะความร้อนได้ผ่านคลาส PowerManager
อินเทอร์เฟซ IThermal
มีฟังก์ชันการทำงานทั้งหมดที่จำเป็น รวมถึงการแสดงค่าสถานะความร้อน อินเทอร์เฟซ Binder ของ Thermal ได้รับการรวมเป็นอินเทอร์เฟซ OnThermalStatusChangedListener
ซึ่งแอปสามารถใช้ได้เมื่อลงทะเบียนหรือนำ Listener สถานะความร้อนออก
Android Thermal API มีทั้งวิธีการเรียกกลับและการสำรวจเพื่อให้แอปได้รับการแจ้งเตือนระดับความรุนแรงของความร้อนผ่านรหัสสถานะ ซึ่งกำหนดไว้ในคลาส PowerManager
โดยวิธีการมีดังนี้
getCurrentThermalStatus()
แสดงผลสถานะความร้อนปัจจุบันของอุปกรณ์เป็นจำนวนเต็ม เว้นแต่อุปกรณ์กำลังมีการควบคุมaddThermalStatusListener()
เพิ่มผู้ฟังremoveThermalStatusListener()
นำผู้ฟังที่เพิ่มไว้ก่อนหน้านี้ออก
ใช้รหัสสถานะความร้อน
รหัสสถานะความร้อนจะแปลงเป็นระดับการควบคุมเฉพาะ ซึ่งคุณใช้เพื่อรวบรวมข้อมูลและออกแบบ UX ที่ดีที่สุดได้ ตัวอย่างเช่น แอปอาจได้รับสถานะ 0x00000000
(THERMAL_STATUS_NONE
) ซึ่งอาจเปลี่ยนไปเป็น 0x00000001
(THERMAL_STATUS_LIGHT
) ในภายหลัง การทําเครื่องหมายสถานะ 0x00000000
เป็น t0 แล้ววัดเวลาที่ผ่านไปจากสถานะ THERMAL_STATUS_NONE
เป็นสถานะ THERMAL_STATUS_LIGHT
เป็น t1 จะช่วยให้ผู้ผลิตอุปกรณ์ออกแบบและทดสอบกลยุทธ์การบรรเทาสําหรับ Use Case ที่เฉพาะเจาะจงได้ ตารางต่อไปนี้แสดงวิธีแนะนำในการใช้รหัสสถานะความร้อน
รหัสสถานะการระบายความร้อน | คำอธิบายและการใช้งานที่แนะนำ |
---|---|
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
จากอินเทอร์เฟซเซิร์ฟเวอร์เคอร์เนลเพื่อจำลองการเปลี่ยนแปลงอุณหภูมิได้