Congélateur d'applications mises en cache

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 au comportement anormal qui peuvent tenter de fonctionner lorsqu'elles sont mises en cache. Le framework gèle les applications mises en cache en migrant leurs processus vers un cgroup figé. Cela réduit la consommation de processeur actif et inactif en présence d'applications mises en cache actives. Le congélateur d'applications 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 utilise le congélateur cgroup v2 du noyau. Les appareils livrés avec un noyau compatible peuvent (facultativement) 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 lorsque 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 ne dispose pas d'un 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 sont pas censés effectuer de tâches lorsqu'ils sont mis en cache, mais certaines applications peuvent disposer de fonctionnalités personnalisées prises en charge par des processus qui sont censés s'exécuter lorsqu'ils sont mis 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 dispose d'un processus qui doit effectuer des activités pendant la mise en cache, définissez l'état du processus sur "non mis en cache" (par exemple, Bound ForeGround Service (BFGS) ou premier plan) avant que le processus n'ait besoin d'effectuer une tâche pour permettre à l'application de rester active.

Tester le congélateur d'applications

Pour vérifier que le congélateur d'applications fonctionne comme prévu, utilisez les ressources suivantes :

  • Pour obtenir la liste des processus figés, utilisez la commande adb shell dumpsys activity et recherchez Apps frozen:.

  • Vérifiez la présence du fichier /sys/fs/cgroup/uid_0/cgroup.freeze.

  • Affichez logcat, qui indique les entrées figées et non figées chaque fois qu'un processus migre vers ou hors du congélateur. Exemple :

    adb logcat | grep -i "\(freezing\|froze\)"