Android 11 QPR3 ou version ultérieure est compatible avec le congélateur d'applications mises en cache. Cette fonctionnalité arrête l'exécution des processus mis en cache et réduit l'utilisation des ressources par les applications qui ne fonctionnent pas correctement et qui peuvent tenter de fonctionner en mode mis en cache. Le framework fige les applications mises en cache en migrant leurs processus vers un cgroup figé. Cela réduit la consommation de processeur active et inactive en présence d'applications mises en cache actives. Le congélateur d'application peut être activé à l'aide d'un indicateur de configuration système ou d'une option pour les développeurs.
Implémenter le congélateur d'applications
Le congélateur d'applications mises en cache exploite le congélateur cgroup v2 du kernel. Les appareils livrés avec un noyau compatible peuvent (facultatif) l'activer. Pour ce faire, activez l'option pour les développeurs "Suspendre l'exécution pour les applications mises en cache" ou définissez l'indicateur de configuration de l'appareil activity_manager_native_boot use_freezer
sur true
. Exemple :
adb shell device_config put activity_manager_native_boot use_freezer true && adb reboot
Le congélateur est désactivé lorsque l'indicateur use_freezer
est défini sur "false" ou que l'option pour les développeurs est désactivée. Vous pouvez activer ou désactiver ce paramètre en modifiant la configuration d'un appareil dans une version ou une mise à jour logicielle.
Le congélateur d'applications n'expose pas d'API officielles (et n'a pas de client d'implémentation de référence), mais utilise les API système masquées setProcessFrozen
et enableFreezer
. Pour en savoir plus sur ces API, consultez Process.java
d'ActivityManager et l'API ActivityManagerService. Les développeurs peuvent également se référer au code client dans ActivityManager
pour les tests.
Gérer les fonctionnalités personnalisées
En règle générale, les processus ne doivent pas effectuer de travail lorsqu'ils sont mis en cache, mais certaines applications peuvent comporter des fonctionnalités personnalisées compatibles avec des processus qui doivent s'exécuter en cas de mise en cache. Lorsque le congélateur d'applications est activé sur un appareil exécutant une telle application, les processus mis en cache sont figés et peuvent empêcher le fonctionnement des fonctionnalités personnalisées.
Pour contourner ce problème, si une application doit effectuer des activités lorsqu'elle est mise en cache, définissez l'état du processus sur "non mis en cache" (par exemple, service de premier plan lié ou service de premier plan) avant que le processus ne doive effectuer une tâche pour permettre à l'application de rester active.
Tester le congélateur des applications
Pour vérifier que le congélateur d'applications fonctionne comme prévu, utilisez les ressources suivantes:
Recherchez la liste des processus figés à l'aide de la commande
adb shell dumpsys activity
et de la commande grep pourApps frozen:
.Vérifiez la présence du fichier
/sys/fs/cgroup/uid_0/cgroup.freeze
.Affichez Logcat, qui affiche les entrées congelées et non congelées chaque fois qu'un processus migre dans ou hors du congélateur. Exemple :
adb logcat | grep -i "\(freezing\|froze\)"