Avec le framework Android, les fabricants d'appareils et les développeurs d'applications peuvent utiliser des données thermiques pour garantir une expérience utilisateur (UX) cohérente si un appareil commence à surchauffer. Par exemple, lorsqu'un système subit un stress thermique, les tâches jobscheduler
sont limitées et, si nécessaire, un arrêt thermique du framework est lancé. Les applications qui reçoivent des notifications de stress thermique via un rappel enregistré dans la classe PowerManager
peuvent ajuster leur expérience utilisateur de manière appropriée.
HAL thermique
Android 9 et les versions antérieures utilisent une interface de sondage définie dans Thermal HAL 1.0 pour obtenir les relevés de température. Ce HAL permettait au framework Android et à d'autres clients approuvés, tels que le HAL d'un fabricant d'appareils, de lire la température actuelle et les seuils de limitation et d'arrêt spécifiques aux règles du produit pour chaque capteur via la même API.
Android 10 a introduit un système thermique dans le framework Android et une nouvelle version du HAL, Thermal HAL 2.0, qui abstrait l'interface des appareils matériels du sous-système thermique. L'interface matérielle comprend des capteurs de température et des thermistors pour la peau, la batterie, le GPU, le processeur et le port USB. La température cutanée de l'appareil est le système le plus important à suivre pour maintenir la température de la surface de l'appareil dans les limites thermiques spécifiées.
De plus, Thermal HAL 2.0 fournit à plusieurs clients les mesures des capteurs thermiques et les niveaux de gravité associés pour indiquer la contrainte thermique. La figure suivante montre deux messages d'avertissement de l'interface utilisateur du système Android. Ces messages s'affichent lorsque l'interface de rappel IThermalEventListener
pour les capteurs USB_PORT
et SKIN
, respectivement, atteint le niveau de gravité THERMAL_STATUS_EMERGENCY
.
Figure 1 : Avertissements de surchauffe
Les températures actuelles sont récupérées pour les différents types de capteurs thermiques via l'HAL IThermal. Chaque appel de fonction renvoie une valeur d'état SUCCESS
ou FAILURE
. Si SUCCESS
est renvoyé, le processus se poursuit. Si FAILURE
est renvoyé, un message d'erreur, qui doit être lisible par l'utilisateur, est envoyé à status.debugMessage
.
En plus d'être une interface de sondage qui renvoie les températures actuelles, vous pouvez utiliser le rappel IThermalChangedCallback
(HIDL, Android 10 à 13) ou IThermalChangedCallback
(AIDL, Android 14 et versions ultérieures) avec l'interface de rappel des clients HAL thermiques, tels que le service thermique du framework. Par exemple, RegisterIThermalChangedCallback
et UnregisterIThermalChangedCallback
pour enregistrer ou désenregistrer des événements de modification de gravité. Si l'intensité thermique d'un capteur donné a changé, notifyThrottling
envoie un rappel d'événement de limitation thermique aux écouteurs d'événements thermiques.
En plus des informations sur les capteurs thermiques, une liste d'appareils de refroidissement atténués est exposée dans getCurrentCoolingDevices
. L'ordre de cette liste est persistant, même si un appareil de refroidissement est déconnecté. Les fabricants d'appareils peuvent utiliser la liste pour collecter des métriques statsd
.
Pour en savoir plus, consultez la section Implémentation de référence.
Vous pouvez ajouter vos propres extensions, mais vous ne devez pas désactiver la fonction d'atténuation thermique.
Service thermique
Sous Android 10 et versions ultérieures, le service thermique du framework fournit une surveillance constante à l'aide des différents signaux d'atténuation de Thermal HAL 2.0 et fournit des commentaires sur la gravité du débit limité à ses clients. Ces clients incluent des composants internes et des applications Android. Le service utilise deux interfaces de rappel de liaison, IThermalEventListener
et IThermalStatusListener
, exposées en tant que rappels. Le premier est destiné à l'utilisation interne de la plate-forme et des fabricants d'appareils, tandis que le second est destiné aux applications Android.
Via les interfaces de rappel, l'état thermique actuel d'un appareil peut être récupéré sous la forme d'une valeur entière allant de 0x00000000
(pas de limitation) à 0x00000006
(arrêt de l'appareil). Seul un service système approuvé, tel qu'une API Android ou une API du fabricant de l'appareil, peut accéder aux informations détaillées sur le capteur thermique et les événements thermiques. L'image suivante fournit un modèle du flux de processus de mitigation thermique sous Android 10 ou version ultérieure:
Figure 2. Flux de processus d'atténuation thermique sous Android 10 et versions ultérieures.
Consignes du fabricant de l'appareil
Pour signaler le capteur de température de l'appareil et l'état de limitation pour Android 10 à 13, les fabricants d'appareils doivent implémenter l'aspect HIDL du HAL thermique 2.0 (IThermal.hal
).
Pour signaler le capteur de température de l'appareil et l'état de limitation pour Android 14, les fabricants d'appareils doivent implémenter l'aspect AIDL du HAL thermique 2.0 (IThermal.aidl
).
Tout ce qui limite les performances de l'appareil, y compris les contraintes d'alimentation de la batterie, doit être signalé via la HAL thermique. Pour ce faire, placez tous les capteurs susceptibles d'indiquer un besoin de mitigation (en fonction des changements d'état) dans le HAL thermique et signalez la gravité de toute action de mitigation prise. La valeur de température renvoyée par le relevé d'un capteur ne doit pas nécessairement être la température réelle, tant qu'elle reflète avec précision le seuil de gravité correspondant. Par exemple, vous pouvez transmettre différentes valeurs numériques au lieu de vos valeurs de seuil de température réelles, ou vous pouvez intégrer le bandeau de protection aux spécifications de seuil pour fournir une hystérésis. Cependant, le niveau de gravité correspondant à cette valeur doit correspondre à ce qui est nécessaire pour ce seuil. Par exemple, vous pouvez décider de renvoyer 72 °C comme seuil de température critique, lorsque la température réelle est de 65 °C, et qu'elle correspond à la gravité critique que vous avez spécifiée. Le niveau de gravité doit être précis pour une fonctionnalité optimale du framework thermique.
Pour en savoir plus sur les niveaux de seuil du framework et sur la façon dont ils correspondent aux actions d'atténuation, consultez la section Utiliser les codes d'état thermique.
Utiliser des API thermiques
Les applications peuvent ajouter et supprimer des écouteurs, et accéder aux informations sur l'état thermique via la classe PowerManager
.
L'interface IThermal
fournit toutes les fonctionnalités nécessaires, y compris le retour des valeurs d'état thermique. L'interface de liaison IThermal est encapsulée en tant qu'interface OnThermalStatusChangedListener
, que les applications peuvent utiliser lors de l'enregistrement ou de la suppression des écouteurs d'état thermique.
Les API thermiques Android disposent de méthodes de rappel et d'interrogation pour que les applications soient informées des niveaux de gravité thermique via des codes d'état définis dans la classe PowerManager
. Les méthodes sont les suivantes:
getCurrentThermalStatus()
renvoie l'état thermique actuel de l'appareil sous la forme d'un entier, sauf si l'appareil est soumis à un étranglement.addThermalStatusListener()
ajoute un écouteur.removeThermalStatusListener()
supprime un écouteur ajouté précédemment.
Utiliser des codes d'état thermique
Les codes d'état thermique se traduisent par des niveaux de limitation spécifiques, que vous pouvez utiliser pour collecter des données et concevoir une expérience utilisateur optimale. Par exemple, les applications peuvent recevoir un état 0x00000000
(THERMAL_STATUS_NONE
), qui peut ensuite passer à 0x00000001
(THERMAL_STATUS_LIGHT
). En marquant l'état 0x00000000
comme t0, puis en mesurant le temps écoulé entre l'état THERMAL_STATUS_NONE
et l'état THERMAL_STATUS_LIGHT
comme t1, les fabricants d'appareils peuvent concevoir et tester des stratégies d'atténuation pour des cas d'utilisation spécifiques. Le tableau suivant présente des suggestions d'utilisation des codes d'état thermique:
Code d'état thermique | Description et utilisation suggérée |
---|---|
THERMAL_STATUS_NONE (0x00000000 ) |
Aucune limitation. Utilisez cet état pour implémenter des actions de protection, telles que la détection du début de la période (t0 à t1) de THERMAL_STATUS_NONE (0 ) à THERMAL_STATUS_LIGHT (1 ). |
THERMAL_STATUS_LIGHT (0x00000001 ) |
Légère limitation, l'expérience utilisateur n'est pas affectée. Utilisez une atténuation douce de l'appareil pour cette étape. Par exemple, ignorez le boosting ou utilisez des fréquences inefficaces, mais uniquement sur les cœurs de grande taille. |
THERMAL_STATUS_MODERATE (0x00000002 ) |
Limitation modérée, l'expérience utilisateur n'est pas grandement affectée. La mitigation thermique a un impact sur les activités de premier plan. Les applications doivent donc réduire immédiatement la consommation d'énergie. |
THERMAL_STATUS_SEVERE (0x00000003 ) |
Limitation importante et impact considérable sur l'expérience utilisateur. À ce stade, la mitigation thermique de l'appareil doit limiter la capacité du système. Cet état peut entraîner des effets secondaires, tels que des à-coups à l'écran et des à-coups audio. |
THERMAL_STATUS_CRITICAL (0x00000004 ) |
La plate-forme a tout fait pour réduire la consommation d'énergie. Le logiciel de gestion thermique de l'appareil a défini tous les composants pour qu'ils s'exécutent à leur capacité la plus faible. |
THERMAL_STATUS_EMERGENCY (0x00000005 ) |
Les composants clés de la plate-forme s'arrêtent en raison de conditions thermiques et les fonctionnalités de l'appareil sont limitées. Ce code d'état représente le dernier avertissement avant l'arrêt de l'appareil. Dans cet état, certaines fonctions, telles que le modem et les données mobiles, sont complètement désactivées. |
THERMAL_STATUS_SHUTDOWN (0x00000006 ) |
Arrêtez immédiatement. En raison de la gravité de cette étape, il est possible que les applications ne puissent pas recevoir cette notification. |
Les fabricants d'appareils doivent réussir le test VTS pour le HAL thermique et peuvent utiliser emul_temp
à partir de l'interface sysfs du kernel pour simuler les changements de température.