Giảm nhiệt

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á nhiệt. 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, hệ thống sẽ khởi động quá trình tắt nhiệt của khung. Các ứng dụng nhận thông báo về nhiệt thông qua lệnh gọi lại đã đăng ký trong lớp PowerManager có thể điều chỉnh trải nghiệm người dù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ò ý kiến được xác định trong Thermal HAL 1.0 để lấy kết quả đo 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 và tắt theo chính sách sản phẩm cụ thể 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, Thermal HAL 2.0, giúp trừu tượng hoá giao diện cho 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ảm biến nhiệt độ và nhiệt điện trở cho da, pin, GPU, CPU và cổng USB. Nhiệt độ trên da của thiết bị là hệ thống quan trọng nhất cần theo dõi để đảm bảo nhiệt độ bề mặt của thiết bị nằm trong các 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 thông tin đọc của cảm biến nhiệt và các mức độ nghiêm trọng liên quan để cho biết ứng suất nhiệt. Hình sau đây cho thấy 2 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 sẽ hiển thị khi giao diện gọi lại IThermalEventListener cho cảm biến USB_PORTSKIN lần lượt đạt đến mức độ nghiêm trọng THERMAL_STATUS_EMERGENCY.

Cảnh báo quá nhiệt.

Hình 1. Cảnh báo quá nhiệt.

Nhiệt độ hiện tại được truy xuất cho nhiều loại cảm biến nhiệt 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ề, quy trình sẽ tiếp tục. Nếu FAILURE được trả về, thì một thông báo lỗi (phải có thể đọc được) sẽ được gửi đến status.debugMessage.

Ngoài việc là một giao diện thăm dò ý kiến 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ừ các ứng dụng HAL nhiệt, chẳng hạn như dịch vụ nhiệt của khung. Ví dụ: RegisterIThermalChangedCallbackUnregisterIThermalChangedCallback để đă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 của nhiệt của một cảm biến nhất định đã thay đổi, notifyThrottling sẽ gửi lệnh gọi lại sự kiện điều tiết nhiệt đến 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 được giảm thiểu sẽ hiển thị trong getCurrentCoolingDevices. Thứ tự của danh sách này là cố định, ngay cả khi một thiết bị làm mát đã bị ngắt kết nối. 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 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 cung cấp tính nă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 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 hai giao diện gọi lại liên kết, IThermalEventListenerIThermalStatusListener, được hiển thị dưới dạng lệnh gọi lại. API đầu tiên dành cho nhà sản xuất thiết bị và nền tảng nội bộ, còn API thứ hai dành cho ứng dụng Android.

Thông qua các giao diện gọi lại, bạn có thể truy xuất trạng thái nhiệt hiện tại của thiết bị dưới dạng một giá trị số nguyên trong khoảng từ 0x00000000 (không điều tiết) đến 0x00000006 (tắt thiết bị). Chỉ một dịch vụ hệ thống đáng tin cậy, chẳng hạn như API Android hoặc API nhà sản xuất thiết bị, mới có thể truy cập vào cảm biến nhiệt và thông tin sự kiện nhiệt chi tiết. Hình sau đây cung cấp mô hình quy trình giảm nhiệt trong Android 10 trở lên:

Quy trình giảm nhiệt trong Android 10 trở lên.

Hình 2. Quy trình giảm nhiệt trên 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 độ của thiết bị và trạng thái điều tiết 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 HAL 2.0 nhiệt (IThermal.hal).

Để báo cáo cảm biến nhiệt độ của thiết bị và trạng thái điều tiết cho Android 14, nhà sản xuất thiết bị phải triển khai khía cạnh AIDL của HAL 2.0 nhiệt (IThermal.aidl).

Mọi yếu tố làm giảm hiệu suất thiết bị, bao gồm cả các quy tắ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 cần 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 được thực hiện. Giá trị nhiệt độ được trả về từ chỉ số 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 vùng đệm 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 ở 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à 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.

Dùng API Nhiệt

Các ứng dụng có thể thêm và xoá 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ả 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 liên kết IThermal (Giao diện liên kết IThermal) được bao bọc 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.

API nhiệt của Android có cả phương thức gọi lại và thăm dò ý kiến để các ứng dụng được thông báo về mức độ 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à:

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ụ: ứng dụng có thể nhận được trạng thái 0x00000000 (THERMAL_STATUS_NONE), sau đó trạng thái này có thể thay đổi thành 0x00000001 (THERMAL_STATUS_LIGHT). Việc đánh dấu trạng thái 0x00000000 là t0, sau đó đo lường 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 nhà sản xuất thiết bị thiết kế và thử nghiệm 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 các cách đề xuất để 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 khoảng thời gian bắt đầu (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. Hãy giảm thiểu tác động đến thiết bị ở 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ả, nhưng chỉ trên các lõi lớn.
THERMAL_STATUS_MODERATE (0x00000002) Ở mức điều tiết vừa phải, trải nghiệm người dùng sẽ không bị ảnh hưởng nhiều. Biện pháp giảm nhiệt tác động đến các hoạt động trên nền trước, vì vậy, ứng dụng cần giảm pin ngay lập tức.
THERMAL_STATUS_SEVERE (0x00000003) Điều tiết nghiêm trọng; trải nghiệm người dùng bị ảnh hưởng lớn. Trong giai đoạn này, tính năng giảm nhiệt của 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 hiệu ứng phụ, chẳng hạn như hiện tượng giật khi hiển thị và âm thanh bị dao động.
THERMAL_STATUS_CRITICAL (0x00000004) Nền tảng đã làm mọi thứ để giảm mức tiêu thụ điện năng. 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 thể hiện 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. 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 bài kiểm thử VTS cho HAL (Lớp trừu tượng phần cứng) nhiệt và có thể sử dụng emul_temp từ giao diện hệ thống nhân hệ thống (kernel sysfs) để mô phỏng các thay đổi về nhiệt độ.