Với khung Android, nhà sản xuất thiết bị và nhà phát triển ứng dụng có thể sử dụng dữ liệu nhiệt để đảm bảo trải nghiệm người dùng (UX) nhất quán nếu thiết bị bắt đầu quá nóng. Ví dụ: khi một hệ thống chịu áp lực về nhiệt, các công việc jobscheduler
sẽ bị hạn chế và nếu cần, quá trình tắt máy do nhiệt của hệ thống sẽ được bắt đầu. Các ứng dụng nhận được thông báo về căng thẳng nhiệt thông qua lệnh gọi lại đã đăng ký trong lớp PowerManager
có thể điều chỉnh UX của chúng một cách linh hoạt.
HAL nhiệt
Android 9 trở xuống sử dụng giao diện thăm dò được xác định trong Thermal HAL 1.0 để nhận chỉ số nhiệt độ. HAL này cho phép khung Android và các ứng dụng khách đáng tin cậy khác, chẳng hạn như HAL của nhà sản xuất thiết bị, đọc ngưỡng điều chỉnh và tắt cụ thể theo chính sách sản phẩm và nhiệt độ hiện tại cho từng cảm biến thông qua cùng một API.
Android 10 đã giới thiệu hệ thống nhiệt trong khung Android và phiên bản mới của HAL, Thermal HAL 2.0, trừu tượng hóa giao diện với các thiết bị phần cứng của hệ thống con nhiệt. Giao diện phần cứng bao gồm các cảm biến nhiệt độ và nhiệt điện trở cho vỏ, pin, GPU, CPU và cổng USB. Nhiệt độ vỏ thiết bị là hệ thống quan trọng nhất cần theo dõi để giữ nhiệt độ bề mặt thiết bị trong giới hạn nhiệt được chỉ định.
Ngoài ra, Thermal HAL 2.0 cung cấp cho nhiều khách hàng các chỉ số cảm biến nhiệt và mức độ nghiêm trọng liên quan để biểu thị ứng suất nhiệt. Hình sau đây hiển thị hai thông báo cảnh báo từ Giao diện người dùng hệ thống Android. Các thông báo này được hiển thị khi giao diện gọi lại IThermalEventListener
cho cảm biến USB_PORT
và SKIN
tương ứng đạt đến mức độ nghiêm trọng THERMAL_STATUS_EMERGENCY
.
Hình 1. Cảnh báo quá nhiệt.
Nhiệt độ hiện tại được truy xuất cho các loại cảm biến nhiệt khác nhau thông qua Ithermal HAL . Mỗi lệnh gọi hàm trả về giá trị trạng thái SUCCESS
hoặc FAILURE
. Nếu trả về SUCCESS
, quá trình sẽ tiếp tục. Nếu trả về FAILURE
, một thông báo lỗi mà con người phải đọc được sẽ được gửi tới status.debugMessage
.
Ngoài vai trò là giao diện thăm dò trả về nhiệt độ hiện tại, bạn có thể sử dụng lệnh gọi lại IThermalChangedCallback
(HIDL, Android 10 đến 13) hoặc IThermalChangedCallback
(AIDL, Android 14 trở lên) với giao diện gọi lại từ máy khách HAL nhiệt, chẳng hạn như của khung dịch vụ nhiệt. Ví dụ: RegisterIThermalChangedCallback
và UnregisterIThermalChangedCallback
để đăng ký hoặc hủy đăng ký các sự kiện thay đổi mức độ nghiêm trọng. Nếu mức độ nghiêm trọng về nhiệt của một cảm biến nhất định đã thay đổi, thì notifyThrottling
sẽ gửi lệnh gọi lại sự kiện tiết lưu nhiệt tới trình xử lý sự kiện nhiệt.
Ngoài thông tin về cảm biến nhiệt, danh sách các thiết bị làm mát giảm nhẹ còn được hiển thị trong getCurrentCoolingDevices
. Thứ tự của danh sách này là ổn định, ngay cả khi thiết bị làm mát không hoạt động. Nhà sản xuất thiết bị có thể sử dụng danh sách để thu thập số liệu statsd
.
Để biết thêm thông tin, hãy xem phần triển khai Tham khảo .
Mặc dù bạn có thể thêm tiện ích mở rộng của riêng mình nhưng bạn không nên tắt chức năng giảm thiểu nhiệt.
Dịch vụ nhiệt
Trong Android 10 trở lên, dịch vụ nhiệt trong khung cung cấp khả năng giám sát liên tục bằng cách sử dụng các tín hiệu giảm thiểu khác nhau từ Thermal HAL 2.0 và cung cấp phản hồi về mức độ nghiêm trọng của việc điều tiết cho khách hàng. Những khách hàng này bao gồm các thành phần nội bộ và ứng dụng Android. Dịch vụ này sử dụng hai giao diện gọi lại liên kết, IThermalEventListener
và IThermalStatusListener
, được hiển thị dưới dạng lệnh gọi lại. Cái trước dành cho việc sử dụng nền tảng nội bộ và nhà sản xuất thiết bị, còn cái sau dành cho ứng dụng Android.
Thông qua các giao diện gọi lại, trạng thái nhiệt hiện tại của thiết bị có thể truy xuất được dưới dạng giá trị nguyên nằm trong khoảng từ 0x00000000
(không điều tiết) đến 0x00000006
(tắt thiết bị). Chỉ dịch vụ hệ thống đáng tin cậy, chẳng hạn như API Android hoặc API của nhà sản xuất thiết bị, mới có thể truy cập vào cảm biến nhiệt chi tiết và thông tin sự kiện nhiệt. Hình sau đây cung cấp mô hình về quy trình giảm thiểu nhiệt trong Android 10 trở lên:
Hình 2. Luồng quy trình giảm thiểu nhiệt trong Android 10 trở lên.
Nguyên tắc của nhà sản xuất thiết bị
Để báo cáo trạng thái tiết lưu và cảm biến nhiệt độ của thiết bị cho Android 10 đến 13, nhà sản xuất thiết bị phải triển khai khía cạnh HIDL của Thermal HAL 2.0 ( IThermal.hal
).
Để báo cáo trạng thái tiết lưu và cảm biến nhiệt độ của thiết bị cho Android 14, nhà sản xuất thiết bị phải triển khai khía cạnh AIDL của Thermal HAL 2.0 ( IThermal.aidl
).
Bất cứ điều gì làm giảm hiệu suất của thiết bị, bao gồm cả hạn chế về năng lượng pin, đều phải được báo cáo thông qua HAL nhiệt. Để đảm bảo điều này xảy ra, hãy đặt tất cả các cảm biến có thể cho biết nhu cầu giảm thiểu (dựa trên các thay đổi trạng thái) vào HAL nhiệt và báo cáo mức độ nghiêm trọng của bất kỳ hành động giảm thiểu nào được thực hiện. Giá trị nhiệt độ được trả về từ kết quả đọc của cảm biến không nhất thiết phải là nhiệt độ thực tế, miễn là nó phản ánh chính xác ngưỡng nghiêm trọng tương ứng. Ví dụ: bạn có thể chuyển các giá trị số khác nhau thay vì giá trị ngưỡng nhiệt độ thực tế của mình hoặc bạn có thể xây dựng dải bảo vệ thành các thông số ngưỡng để cung cấp độ trễ. Tuy nhiên, mức độ nghiêm trọng tương ứng với giá trị đó phải phù hợp với mức cần thiết ở ngưỡng đó. Ví dụ: bạn có thể quyết định trả lại 72°C làm ngưỡng nhiệt độ tới hạn của mình, khi nhiệt độ thực tế là 65°C và nó tương ứng với mức độ nghiêm trọng tới hạn mà bạn đã chỉ định. Mức độ nghiêm trọng phải chính xác để hệ thống tản nhiệt hoạt động tốt nhất.
Để đọc thêm về các mức ngưỡng trong khung và cách chúng tương ứng với các hành động giảm nhẹ, hãy xem Sử dụng mã trạng thái nhiệt .
Sử dụng API nhiệt
Các ứng dụng có thể thêm và xóa trình nghe cũng như truy cập thông tin trạng thái nhiệt thông qua lớp PowerManager
. Giao diện IThermal
cung cấp tất cả các chức năng cần thiết, bao gồm trả về các giá trị trạng thái nhiệt. Giao diện liên kết Ithermal được bao bọc dưới dạng giao diện OnThermalStatusChangedListener
mà ứng dụng có thể sử dụng khi đăng ký hoặc xóa trình xử lý trạng thái nhiệt.
API nhiệt của Android có cả phương thức gọi lại và thăm dò để ứng dụng được thông báo về mức độ nghiêm trọng về nhiệt thông qua mã trạng thái được xác định trong lớp PowerManager
. Các phương pháp là:
-
getCurrentThermalStatus()
trả về trạng thái nhiệt hiện tại của thiết bị dưới dạng số nguyên, trừ khi thiết bị đang trong quá trình điều tiết. -
addThermalStatusListener()
thêm người nghe. -
removeThermalStatusListener()
xóa trình nghe đã được thêm trước đó.
Sử dụng mã trạng thái nhiệt
Mã trạng thái nhiệt chuyển thành các mức điều chỉnh cụ thể mà bạn có thể sử dụng để thu thập dữ liệu và thiết kế UX tối ưu. Ví dụ: ứng dụng có thể nhận được trạng thái 0x00000000
( THERMAL_STATUS_NONE
), trạng thái này sau này có thể thay đổi thành 0x00000001
( THERMAL_STATUS_LIGHT
). Đánh dấu trạng thái 0x00000000
là t0, sau đó đo thời gian trôi qua từ trạng thái THERMAL_STATUS_NONE
đến trạng thái THERMAL_STATUS_LIGHT
vì t1 cho phép các nhà sản xuất thiết bị thiết kế và thử nghiệm các chiến lược giảm nhẹ cho các trường hợp sử dụng cụ thể. Bảng sau đây phác thảo các cách được đề xuất để sử dụng mã trạng thái nhiệt:
Mã trạng thái nhiệt | Mô tả và đề xuất sử dụng |
---|---|
THERMAL_STATUS_NONE ( 0x00000000 ) | Không điều tiết. Sử dụng trạng thái này để thực hiện các hành động bảo vệ, chẳng hạn như phát hiện thời điểm bắt đầu khoảng thời gian (t0 đến t1) từ THERMAL_STATUS_NONE ( 0 ) đến THERMAL_STATUS_LIGHT ( 1 ). |
THERMAL_STATUS_LIGHT ( 0x00000001 ) | Điều chỉnh nhẹ, UX không bị ảnh hưởng. Sử dụng biện pháp giảm thiểu thiết bị nhẹ nhàng cho giai đoạn này. Ví dụ: bỏ qua việc tăng cường hoặc sử dụng tần số không hiệu quả mà chỉ trên các lõi lớn. |
THERMAL_STATUS_MODERATE ( 0x00000002 ) | Điều tiết vừa phải, UX không bị ảnh hưởng nhiều. Việc giảm thiểu nhiệt độ sẽ tác động đến các hoạt động trên nền trước, vì vậy các ứng dụng phải giảm mức tiêu thụ điện năng ngay lập tức. |
THERMAL_STATUS_SEVERE ( 0x00000003 ) | Điều tiết nghiêm trọng; UX bị ảnh hưởng phần lớn. Trong giai đoạn này, việc giảm thiểu nhiệt của thiết bị sẽ hạn chế công suất hệ thống. Trạng thái này có thể gây ra tác dụng phụ, chẳng hạn như giật màn hình và giật âm thanh. |
THERMAL_STATUS_CRITICAL ( 0x00000004 ) | Nền tảng đã làm mọi thứ để giảm sức mạnh. Phần mềm giảm thiểu nhiệt của thiết bị đã đặt tất cả các thành phần chạy ở công suất thấp nhất. |
THERMAL_STATUS_EMERGENCY ( 0x00000005 ) | Các thành phần chính trong nền tảng sắp ngừng hoạt động do điều kiện nhiệt độ và chức năng của thiết bị bị hạn chế. Mã trạng thái này thể hiện cảnh báo cuối cùng trước khi tắt thiết bị. Ở trạng thái này, một số chức năng, chẳng hạn như modem và dữ liệu di động, sẽ bị tắt hoàn toàn. |
THERMAL_STATUS_SHUTDOWN ( 0x00000006 ) | Tắt máy ngay lập tức. Do mức độ nghiêm trọng của giai đoạn này, các ứng dụng có thể không nhận được thông báo này. |
Các nhà sản xuất thiết bị phải vượt qua bài kiểm tra VTS về HAL nhiệt và có thể sử dụng emul_temp
từ giao diện sysfs kernel để mô phỏng sự thay đổi nhiệt độ.