ด้วยเฟรมเวิร์ก 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 ยังช่วยให้ไคลเอนต์หลายรายสามารถอ่านค่าเซ็นเซอร์อุณหภูมิและระดับความรุนแรงที่เกี่ยวข้องเพื่อระบุความเครียดจากความร้อน รูปภาพต่อไปนี้แสดงข้อความเตือนสองข้อความจาก 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 และสูงกว่า) ด้วยอินเทอร์เฟซคอลแบ็กจากไคลเอนต์ Thermal HAL เช่น กรอบงาน บริการระบายความร้อน ตัวอย่างเช่น RegisterIThermalChangedCallback
และ UnregisterIThermalChangedCallback
เพื่อลงทะเบียนหรือยกเลิกการลงทะเบียนเหตุการณ์ที่เปลี่ยนแปลงความรุนแรง หากความรุนแรงของอุณหภูมิของเซ็นเซอร์มีการเปลี่ยนแปลง notifyThrottling
จะส่งการเรียกกลับเหตุการณ์การควบคุมความร้อนไปยัง Listener เหตุการณ์ความร้อน
นอกเหนือจากข้อมูลเซ็นเซอร์อุณหภูมิแล้ว รายการอุปกรณ์ระบายความร้อนที่บรรเทาลงยังแสดงอยู่ใน getCurrentCoolingDevices
ลำดับของรายการนี้ยังคงอยู่ แม้ว่าอุปกรณ์ทำความเย็นจะออฟไลน์ไปแล้วก็ตาม ผู้ผลิตอุปกรณ์สามารถใช้รายการเพื่อรวบรวม statsd
เมตริก
สำหรับข้อมูลเพิ่มเติม โปรดดูที่ การดำเนินการอ้างอิง
แม้ว่าคุณจะสามารถเพิ่มส่วนขยายของคุณเองได้ แต่คุณไม่ควรปิดใช้งานฟังก์ชันลดความร้อน
บริการระบายความร้อน
ใน Android 10 และสูงกว่า บริการระบายความร้อนในเฟรมเวิร์กให้การตรวจสอบอย่างต่อเนื่องโดยใช้สัญญาณการบรรเทาผลกระทบต่างๆ จาก Thermal HAL 2.0 และให้ข้อเสนอแนะเกี่ยวกับความรุนแรงในการควบคุมแก่ลูกค้า ไคลเอนต์เหล่านี้รวมถึงส่วนประกอบภายในและแอป Android บริการนี้ใช้อินเทอร์เฟซการติดต่อกลับของ Binder สองรายการ ได้แก่ IThermalEventListener
และ IThermalStatusListener
ซึ่งเปิดเผยเป็นการเรียกกลับ แบบแรกใช้สำหรับแพลตฟอร์มภายในและอุปกรณ์ของผู้ผลิต และแบบหลังใช้สำหรับแอป 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
ซึ่งแอปสามารถใช้เมื่อลงทะเบียนหรือลบ Listener สถานะความร้อน
API ความร้อนของ Android มีทั้งวิธีการโทรกลับและการสำรวจสำหรับแอปที่จะได้รับการแจ้งเตือนระดับความรุนแรงของความร้อนผ่านรหัสสถานะ ซึ่งกำหนดไว้ในคลาส PowerManager
วิธีการคือ:
-
getCurrentThermalStatus()
ส่งคืนสถานะความร้อนปัจจุบันของอุปกรณ์เป็นจำนวนเต็ม เว้นแต่ว่าอุปกรณ์อยู่ระหว่างการควบคุมปริมาณ -
addThermalStatusListener()
เพิ่มผู้ฟัง -
removeThermalStatusListener()
ลบ Listener ที่เพิ่มไว้ก่อนหน้านี้
ใช้รหัสสถานะความร้อน
รหัสสถานะความร้อนแปลเป็นระดับการควบคุมเฉพาะ ซึ่งคุณสามารถใช้สำหรับการรวบรวมข้อมูลและการออกแบบ 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
จากอินเทอ ร์เฟซเคอร์เนล sysfs เพื่อจำลองการเปลี่ยนแปลงของอุณหภูมิ