เฟรมเวิร์ก 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 โดย API แรกมีไว้สำหรับแพลตฟอร์มภายในและผู้ผลิตอุปกรณ์ ส่วน API ที่สองมีไว้สำหรับแอป 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 และอุณหภูมิดังกล่าวสอดคล้องกับความรุนแรงขั้นวิกฤตที่คุณระบุ ระดับความรุนแรงต้องถูกต้องเพื่อให้เฟรมเวิร์กการแผ่รังสีความร้อนทำงานได้ดีที่สุด
หากต้องการอ่านเพิ่มเติมเกี่ยวกับระดับเกณฑ์ในเฟรมเวิร์กและความสัมพันธ์กับการดำเนินการบรรเทาผลกระทบ โปรดดูใช้รหัสสถานะความร้อน
ใช้ Thermal API
แอปสามารถเพิ่มและนำโปรแกรมรับฟังออก รวมถึงเข้าถึงข้อมูลสถานะความร้อนได้ผ่านคลาส PowerManager
อินเทอร์เฟซ IThermal
มีฟังก์ชันการทำงานทั้งหมดที่จำเป็น รวมถึงการแสดงผลค่าสถานะความร้อน อินเทอร์เฟซ Binder ของ Thermal ได้รับการรวมเป็นอินเทอร์เฟซ OnThermalStatusChangedListener
ซึ่งแอปสามารถใช้ได้เมื่อลงทะเบียนหรือนำ Listener สถานะความร้อนออก
API ความร้อนของ Android มีทั้งเมธอดการเรียกกลับและการสำรวจเพื่อให้แอปได้รับการแจ้งเตือนระดับความรุนแรงของความร้อนผ่านรหัสสถานะ ซึ่งกำหนดไว้ในคลาส 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
จากอินเทอร์เฟซ sysfs เคอร์เนล เพื่อจำลองการเปลี่ยนแปลงอุณหภูมิได้