Congelador de aplicaciones en caché

Android 11 QPR3 o superior es compatible con el congelador de aplicaciones en caché. Esta función detiene la ejecución de los procesos almacenados en caché y reduce el uso de recursos al comportarse mal las aplicaciones que podrían intentar operar mientras están almacenadas en caché. El marco congela las aplicaciones almacenadas en caché al migrar sus procesos a un cgroup congelado; esto reduce el consumo de CPU activo e inactivo en presencia de aplicaciones en caché activas. El congelador de aplicaciones se puede habilitar mediante un indicador de configuración del sistema o una opción de desarrollador.

Implementando el congelador de aplicaciones

El congelador de aplicaciones en caché aprovecha el congelador kernel cgroup v2. Los dispositivos que se envían con un kernel compatible pueden habilitarlo (opcionalmente). Para hacerlo, habilite la opción de desarrollador "Suspender la ejecución de aplicaciones almacenadas en caché" o configure el indicador de configuración del dispositivo activity_manager_native_boot use_freezer en true . Por ejemplo:

adb shell device_config put activity_manager_native_boot use_freezer true && adb reboot

El congelador está deshabilitado cuando el indicador use_freezer está configurado en falso o la opción de desarrollador está deshabilitada. Puede alternar esta configuración cambiando la configuración de un dispositivo en una versión o actualización de software.

El congelador de aplicaciones no expone las API oficiales (y no tiene un cliente de implementación de referencia), pero usa las API ocultas del sistema setProcessFrozen y enableFreezer . Para obtener detalles sobre estas API, consulte el Process.java de ActivityManager y la API de ActivityManagerService. Los desarrolladores también pueden consultar el código del cliente en ActivityManager para realizar experimentos.

Manejo de características personalizadas

Por lo general, no se espera que los procesos realicen ningún trabajo cuando se almacenan en caché, pero algunas aplicaciones pueden tener funciones personalizadas compatibles con procesos que se espera que se ejecuten mientras se almacenan en caché. Cuando el congelador de aplicaciones está habilitado en un dispositivo que ejecuta dicha aplicación, los procesos almacenados en caché se congelan y pueden impedir que funcionen las funciones personalizadas.

Como solución alternativa, si una aplicación tiene un proceso que necesita realizar actividades mientras está almacenado en caché, cambie el estado del proceso a no almacenado en caché (como Bound ForeGround Service (BFGS) o primer plano) antes de que el proceso deba realizar algún trabajo para permitir que la aplicación para permanecer activo.

Probando el congelador de aplicaciones

Para verificar que el congelador de aplicaciones funcione según lo previsto, use los siguientes recursos:

  • Busque una lista de procesos almacenados en caché en /dev/freezer/frozen/cgroup.procs .

  • Compruebe la presencia del archivo /sys/fs/cgroup/uid_0/cgroup.freeze .

  • Ver logcat, que muestra entradas congeladas/descongeladas cada vez que un proceso migra dentro o fuera del congelador. Por ejemplo:

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