Congélateur d'applications en cache

Android 11 QPR3 ou version ultérieure prend en charge 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 en cas de mauvais comportement des applications qui pourraient tenter de fonctionner pendant la mise en cache. Le framework gèle les applications mises en cache en migrant leurs processus vers un groupe de contrôle gelé ; cela réduit la consommation du processeur actif et inactif en présence d'applications actives en cache. Le congélateur d'applications peut être activé à l'aide d'un indicateur de configuration système ou d'une option de développeur.

Implémenter le congélateur d'applications

Le congélateur d'applications en cache exploite le congélateur du noyau cgroup v2. Les appareils livrés avec un noyau compatible peuvent (en option) l'activer. Pour ce faire, activez l'option du développeur « 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 . Par 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 développeur 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 les API officielles (et n'a pas de client d'implémentation de référence), mais utilise les API système cachées setProcessFrozen et enableFreezer . Pour plus de détails sur ces API, reportez-vous à Process.java d'ActivityManager et à l'API ActivityManagerService. Les développeurs peuvent également se référer au code client dans ActivityManager pour des expériences.

Gérer les fonctionnalités personnalisées

En règle générale, les processus ne sont pas censés effectuer de travail lorsqu'ils sont mis en cache, mais certaines applications peuvent avoir des fonctionnalités personnalisées prises en charge par les 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 gelés et peuvent empêcher le fonctionnement des fonctionnalités personnalisées.

Pour contourner le problème, si une application dispose d'un processus qui doit effectuer des activités lorsqu'elle est en cache, modifiez l'état du processus en non mis en cache (tel que Bound ForeGround Service (BFGS) ou premier plan) avant que le processus n'ait besoin d'effectuer un travail pour autoriser l'application. pour rester actif.

Testez le congélateur d'applications

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

  • Recherchez une liste des processus gelés à l’aide de la commande adb shell dumpsys activity et saisissez le mot-clé Frozen .

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

  • Affichez logcat, qui affiche les entrées gelées et non gelées chaque fois qu'un processus migre vers ou hors du congélateur. Par exemple:

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