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

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

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