การลดความร้อน

เฟรมเวิร์ก 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 ขึ้นไป

ขั้นตอนการลดความร้อนใน 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() เพิ่ม Listener
  • 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 สำหรับ HAL ความร้อน และใช้ emul_temp จากอินเทอร์เฟซ kernel sysfs เพื่อจำลองการเปลี่ยนแปลงอุณหภูมิได้