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