С помощью платформы Android производители устройств и разработчики приложений могут использовать тепловые данные для обеспечения стабильного взаимодействия с пользователем (UX), если устройство начинает перегреваться. Например, когда система подвергается термическому стрессу, задания jobscheduler
заданий регулируются и, при необходимости, инициируется тепловое отключение платформы. Приложения, которые получают уведомления о температурном стрессе через зарегистрированный обратный вызов в классе PowerManager
могут корректно настраивать свой пользовательский интерфейс.
Тепловой ХАЛ
Android 9 и более ранние версии используют интерфейс опроса, определенный в Thermal HAL 1.0, для получения показаний температуры. Этот HAL позволял платформе Android и другим доверенным клиентам, таким как HAL производителя устройства, считывать текущую температуру и пороговые значения регулирования и отключения, специфичные для политики продукта, для каждого датчика через один и тот же API.
В Android 10 представлена тепловая система в рамках Android и новая версия HAL, Thermal HAL 2.0, которая абстрагирует интерфейс с аппаратными устройствами тепловой подсистемы. Аппаратный интерфейс включает в себя датчики температуры и термисторы для кожи, аккумулятора, графического процессора, процессора и порта USB. Температура кожи устройства является наиболее важной системой, которую необходимо отслеживать, чтобы поддерживать температуру поверхности устройства в заданных тепловых пределах.
Кроме того, Thermal HAL 2.0 предоставляет нескольким клиентам показания термодатчиков и соответствующие уровни серьезности для обозначения теплового стресса. На следующем рисунке показаны два предупреждающих сообщения из пользовательского интерфейса системы 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 в платформе обеспечивает постоянный мониторинг с использованием различных сигналов смягчения из Thermal HAL 2.0 и предоставляет своим клиентам обратную связь о серьезности регулирования. Эти клиенты включают внутренние компоненты и приложения Android. Служба использует два интерфейса обратного вызова привязки, IThermalEventListener
и IThermalStatusListener
, представленные как обратные вызовы. Первый предназначен для внутреннего использования платформ и производителей устройств, а второй — для приложений Android.
Через интерфейсы обратного вызова текущее тепловое состояние устройства можно получить в виде целочисленного значения в диапазоне от 0x00000000
(без регулирования) до 0x00000006
(выключение устройства). Только доверенная системная служба, такая как API Android или API производителя устройства, может получить доступ к подробной информации о термодатчике и тепловых событиях. На следующем рисунке представлена модель процесса снижения температуры в 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
Приложения могут добавлять и удалять прослушиватели, а также получать доступ к информации о температурном состоянии через класс PowerManager
. Интерфейс IThermal
предоставляет все необходимые функции, включая возврат значений теплового статуса. Интерфейс связывателя IThermal упакован в интерфейс OnThermalStatusChangedListener
, который приложения могут использовать при регистрации или удалении прослушивателей теплового статуса.
Термальные API Android имеют как методы обратного вызова, так и методы опроса, позволяющие приложениям уведомляться об уровнях серьезности перегрева с помощью кодов состояния, которые определены в классе PowerManager
. Методы:
-
getCurrentThermalStatus()
возвращает текущий тепловой статус устройства в виде целого числа, если только устройство не подвергается регулированию. -
addThermalStatusListener()
добавляет прослушиватель. -
removeThermalStatusListener()
удаляет ранее добавленный прослушиватель.
Используйте коды температурного статуса
Коды температурного статуса преобразуются в определенные уровни регулирования, которые вы можете использовать для сбора данных и разработки оптимального пользовательского интерфейса. Например, приложения могут получить статус 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 ядра для имитации изменений температуры.