Com o framework do Android, fabricantes de dispositivos e desenvolvedores de apps podem usar dados térmicos para garantir uma experiência do usuário (UX) consistente se um dispositivo começar a superaquecer. Por exemplo, quando um sistema passa por estresse térmico, os jobs jobscheduler
são limitados e, se necessário, um desligamento térmico do framework é iniciado. Os apps que recebem notificações de estresse térmico
por um callback registrado na
classe PowerManager
podem ajustar a experiência do usuário de maneira adequada.
HAL térmica
O Android 9 e versões anteriores usam uma interface de polling definida na HAL térmica 1.0 para receber leituras de temperatura. Essa HAL permitia que o framework do Android e outros clientes confiáveis, como a HAL de um fabricante de dispositivos, lessem a temperatura atual e os limites de redução e desligamento específicos da política do produto para cada sensor usando a mesma API.
O Android 10 introduziu um sistema térmico no framework do Android e uma nova versão da HAL, a Thermal HAL 2.0, que abstrai a interface para os dispositivos de hardware do subsistema térmico. A interface de hardware inclui sensores de temperatura e termistores para a pele, bateria, GPU, CPU e porta USB. A temperatura da superfície do dispositivo é o sistema mais importante para monitorar e manter a temperatura dentro dos limites térmicos especificados.
Além disso, a HAL térmica 2.0 fornece a vários clientes leituras de sensores térmicos e níveis de gravidade associados para indicar estresse térmico. A figura a seguir mostra duas mensagens de aviso da interface do sistema Android. Essas mensagens são exibidas quando a interface de callback IThermalEventListener
para os sensores USB_PORT
e SKIN
, respectivamente, atinge o nível de gravidade THERMAL_STATUS_EMERGENCY
.
Figura 1. Avisos de superaquecimento.
As temperaturas atuais são recuperadas para os diferentes tipos de sensores térmicos usando IThermal HAL. Cada chamada de função
retorna um valor de status de SUCCESS
ou FAILURE
. Se SUCCESS
for retornado, o processo vai continuar. Se FAILURE
for retornado, uma mensagem de erro legível será enviada para status.debugMessage
.
Além de ser uma interface de pesquisa que retorna as temperaturas atuais,
você pode usar o callback
IThermalChangedCallback
(HIDL, Android 10 a 13) ou
IThermalChangedCallback
(AIDL, Android 14 e versões mais recentes)
com a interface de callback de clientes HAL térmicos, como o serviço
térmico do framework. Por exemplo, RegisterIThermalChangedCallback
e
UnregisterIThermalChangedCallback
para registrar ou cancelar o registro de eventos
de gravidade alterada. Se a gravidade térmica de um determinado sensor mudar, o
notifyThrottling
vai enviar um callback de evento de redução térmica aos listeners
de eventos térmicos.
Além das informações do sensor térmico, uma lista de dispositivos de resfriamento mitigados
é exposta em getCurrentCoolingDevices
. A ordem da lista é mantida, mesmo que um dispositivo de resfriamento fique off-line. Os fabricantes de dispositivos podem usar a lista para coletar métricas de statsd
.
Para mais informações, consulte a implementação de referência.
Embora seja possível adicionar suas próprias extensões, não desative a função de mitigação térmica.
Serviço térmico
No Android 10 e versões mais recentes, o serviço térmico no framework oferece monitoramento constante usando os vários indicadores de mitigação da HAL térmica 2.0 e fornece feedback de gravidade de limitação aos clientes. Esses clientes incluem componentes internos e apps Android. O serviço usa duas interfaces de callback do binder, IThermalEventListener
e IThermalStatusListener
, expostas como callbacks. O primeiro é para uso interno da plataforma e do fabricante do dispositivo, e o segundo é para apps Android.
Usando as interfaces de callback, o status térmico atual de um dispositivo pode ser
recuperado como um valor inteiro que varia de 0x00000000
(sem limitação) a
0x00000006
(desligamento do dispositivo). Somente um serviço de sistema confiável, como uma API Android ou do fabricante do dispositivo, pode acessar as informações detalhadas do sensor e do evento térmico. A figura a seguir mostra um modelo do fluxo do processo de redução de temperatura no Android 10 e versões mais recentes:
Figura 2. Fluxo do processo de mitigação térmica no Android 10 e versões mais recentes.
Diretrizes do fabricante do dispositivo
Para informar o sensor de temperatura do dispositivo e o status de limitação do Android 10 ao 13, os fabricantes de dispositivos precisam implementar o aspecto HIDL da HAL térmica 2.0 (IThermal.hal
).
Para informar o sensor de temperatura do dispositivo e o status de limitação no Android
14, os fabricantes de dispositivos precisam implementar o aspecto AIDL
da HAL térmica 2.0 (IThermal.aidl
).
Qualquer coisa que reduza o desempenho do dispositivo, incluindo restrições de energia da bateria, precisa ser informada pela HAL térmica. Para garantir que isso aconteça, coloque todos os sensores que possam indicar uma necessidade de mitigação (com base em mudanças de status) no HAL térmico e informe a gravidade de todas as ações de mitigação realizadas. O valor de temperatura retornado de uma leitura do sensor não precisa ser a temperatura real, desde que reflita com precisão o limite de gravidade correspondente. Por exemplo, é possível transmitir valores numéricos diferentes em vez dos valores reais de limite de temperatura ou criar guardbanding nas especificações de limite para fornecer histerese. No entanto, a gravidade correspondente a esse valor precisa corresponder ao que é necessário nesse limite. Por exemplo, você pode decidir retornar 72 °C como o limite de temperatura crítica quando a temperatura real for 65 °C e corresponder à gravidade crítica especificada. O nível de gravidade precisa ser preciso para ter a melhor funcionalidade da estrutura térmica.
Para ler mais sobre os níveis de limite no framework e como eles correspondem às ações de mitigação, consulte Usar códigos de status térmico.
Usar APIs térmicas
Os apps podem adicionar e remover listeners e acessar informações de status térmico
pela classe
PowerManager
.
A interface IThermal
fornece toda a funcionalidade necessária, incluindo
o retorno dos valores de status térmico. A
interface do binder IThermal
é encapsulada como a interface OnThermalStatusChangedListener
, que os apps podem usar
ao registrar ou remover listeners de status térmico.
As APIs térmicas do Android têm métodos de callback e polling para que os apps sejam
notificados dos níveis de gravidade térmica por códigos de status, que são definidos
na classe PowerManager
. Os métodos são:
getCurrentThermalStatus()
retorna o status térmico atual do dispositivo como um número inteiro, a menos que o dispositivo esteja passando por uma limitação.addThermalStatusListener()
adiciona um listener.removeThermalStatusListener()
remove um listener adicionado anteriormente.
Usar códigos de status térmico
Os códigos de status térmico se traduzem em níveis específicos de limitação, que podem ser usados para coletar dados e projetar uma UX ideal. Por exemplo, os apps podem
receber um status de 0x00000000
(THERMAL_STATUS_NONE
), que pode mudar depois
para 0x00000001
(THERMAL_STATUS_LIGHT
). Marcar o estado 0x00000000
como t0 e medir o tempo decorrido do status THERMAL_STATUS_NONE
para
o status THERMAL_STATUS_LIGHT
como t1 permite que os fabricantes de dispositivos projetem e
testem estratégias de mitigação para casos de uso específicos. A tabela a seguir descreve maneiras sugeridas de usar os códigos de status térmico:
Código de status térmico | Descrição e uso sugerido |
---|---|
THERMAL_STATUS_NONE (0x00000000 ) |
Sem limitação. Use esse status para implementar ações de proteção, como detectar o início do período (t0 a t1) de THERMAL_STATUS_NONE (0 ) a THERMAL_STATUS_LIGHT (1 ). |
THERMAL_STATUS_LIGHT (0x00000001 ) |
Limitação leve, a experiência do usuário não é afetada. Use a mitigação suave de dispositivos para esta etapa. Por exemplo, pule o aumento ou o uso de frequências ineficientes, mas apenas em núcleos grandes. |
THERMAL_STATUS_MODERATE (0x00000002 ) |
Limitação moderada, a experiência do usuário não é muito afetada. A mitigação térmica afeta as atividades em primeiro plano, então os apps precisam reduzir o consumo de energia imediatamente. |
THERMAL_STATUS_SEVERE (0x00000003 ) |
Limitação grave. A experiência do usuário é muito afetada. Nessa etapa, a mitigação térmica do dispositivo limita a capacidade do sistema. Esse estado pode causar efeitos colaterais, como instabilidade na tela e instabilidade no áudio. |
THERMAL_STATUS_CRITICAL (0x00000004 ) |
A plataforma fez tudo para reduzir o consumo de energia. O software de mitigação térmica do dispositivo colocou todos os componentes para funcionar na capacidade mínima. |
THERMAL_STATUS_EMERGENCY (0x00000005 ) |
Os principais componentes da plataforma estão sendo desligados devido a condições térmicas, e a funcionalidade do dispositivo está limitada. Esse código de status representa o último aviso antes do desligamento do dispositivo. Nesse estado, algumas funções, como o modem e os dados móveis, são completamente desativadas. |
THERMAL_STATUS_SHUTDOWN (0x00000006 ) |
Desligue imediatamente. Devido à gravidade dessa etapa, os apps talvez não consigam receber essa notificação. |
Os fabricantes de dispositivos precisam passar no teste de VTS para HAL térmico e podem usar
emul_temp
da interface
kernel sysfs
para simular mudanças de temperatura.