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