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

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

ขั้นตอนการจัดการความร้อนใน 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 เคอร์เนล เพื่อจำลองการเปลี่ยนแปลงอุณหภูมิได้