Com o framework do Android, os fabricantes de dispositivos e os 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 UX normalmente.
HAL térmica
O Android 9 e versões anteriores usam uma interface de pesquisa definida na HAL térmica 1.0 para receber leituras de temperatura. Essa HAL permitiu 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 limitação e desligamento específicos da política de produtos para cada sensor pela mesma API.
O Android 10 introduziu um sistema térmico no framework do Android e uma nova versão da HAL, a HAL térmica 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 pele do dispositivo é o sistema mais importante a ser monitorado para manter a temperatura da superfície do dispositivo 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 pela
HAL IThermal. Cada chamada de função retorna um valor de status SUCCESS ou FAILURE. Se SUCCESS for retornado, o processo vai continuar. Se FAILURE for retornado, uma mensagem de erro, que precisa ser 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 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 mudança de gravidade. Se a gravidade térmica de um determinado sensor tiver mudado, notifyThrottling enviará um callback de evento de limitação térmica para listeners de eventos térmicos.
Além das informações do sensor térmico, uma lista de dispositivos de resfriamento atenuados é exposta em getCurrentCoolingDevices. A ordem dessa lista é persistente, mesmo que um dispositivo de resfriamento tenha ficado off-line. Os fabricantes de dispositivos podem usar a lista para coletar métricas 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 fornece 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. A primeira é para uso interno da plataforma e do fabricante do dispositivo, e a segunda é para apps Android.
Por meio das 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 API do fabricante do dispositivo, pode acessar as informações detalhadas do sensor térmico e do evento térmico. A figura a seguir mostra um modelo do fluxo do processo de mitigação térmica 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 do Android 14, os fabricantes de dispositivos precisam implementar o aspecto AIDL da HAL térmica 2.0 (IThermal.aidl).
Tudo o que limita a performance do dispositivo, incluindo restrições de energia da bateria, precisa ser informado pela HAL térmica. Para garantir que isso aconteça, coloque todos os sensores que possam indicar a necessidade de mitigação (com base nas mudanças de status) na HAL térmica 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 uma banda de proteção 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 isso corresponder à gravidade crítica especificada. O nível de gravidade precisa ser preciso para a melhor funcionalidade do framework térmico.
Para saber 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
PowerManager classe.
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 de pesquisa para que os apps sejam
notificados dos níveis de gravidade térmica por códigos de status, que são definidos
na PowerManager classe. 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 são traduzidos para níveis de limitação específicos, 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 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 as 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) para THERMAL_STATUS_LIGHT (1). |
THERMAL_STATUS_LIGHT (0x00000001) |
Limitação leve, a UX não é afetada. Use a mitigação suave do dispositivo para essa fase. 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 UX não é muito afetada. A mitigação térmica afeta as atividades em primeiro plano. Portanto, os apps precisam reduzir a energia imediatamente. |
THERMAL_STATUS_SEVERE (0x00000003) |
Limitação grave; a UX é muito afetada. Nessa fase, a mitigação térmica do dispositivo precisa limitar a capacidade do sistema. Esse estado pode causar efeitos colaterais, como instabilidade na tela e instabilidade de áudio. |
THERMAL_STATUS_CRITICAL (0x00000004) |
A plataforma fez tudo para reduzir a energia. O software de mitigação térmica do dispositivo colocou todos os componentes para serem executados na capacidade mais baixa. |
THERMAL_STATUS_EMERGENCY (0x00000005) |
Os principais componentes da plataforma estão sendo desligados devido a condições térmicas, e a funcionalidade do dispositivo é 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 de rede celular, são desativadas completamente. |
THERMAL_STATUS_SHUTDOWN (0x00000006) |
Desligar imediatamente. Devido à gravidade dessa fase, os apps podem não conseguir receber essa notificação. |
Os fabricantes de dispositivos precisam passar no teste VTS para HAL térmica e podem usar
emul_temp da
interface sysfs
do kernel para simular mudanças de temperatura.