Congelador de apps almacenadas en caché

Android 11 QPR3 o versiones posteriores admiten el congelador de apps almacenadas en caché. Esta función detiene la ejecución de los procesos almacenados en caché y reduce el uso de recursos de las apps con comportamiento incorrecto que podrían intentar funcionar mientras están almacenadas en caché. El framework inmoviliza las apps almacenadas en caché migrando sus procesos a un cgroup inmovilizado, lo que reduce el consumo de CPU activo y en reposo en presencia de apps almacenadas en caché activas. El congelador de apps se puede habilitar con una marca de configuración del sistema o una opción para desarrolladores.

Implementa el congelador de apps

El congelador de apps almacenadas en caché aprovecha el congelador de cgroup v2 del kernel. Los dispositivos que se envían con un kernel compatible pueden habilitarlo (de forma opcional). Para ello, habilita la opción para desarrolladores "Suspende la ejecución de las apps almacenadas en caché" o establece la marca 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 se inhabilita cuando la marca use_freezer se establece como falsa o se inhabilita la opción para desarrolladores. Para activar o desactivar este parámetro de configuración, cambia la configuración de un dispositivo en una versión o actualización de software.

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

Cómo controlar funciones personalizadas

Por lo general, no se espera que los procesos realicen ningún trabajo cuando se almacenan en caché, pero algunas apps pueden tener características personalizadas compatibles con procesos que se espera que se ejecuten mientras se almacena en caché. Cuando el congelador de apps está habilitado en un dispositivo que ejecuta una app de este tipo, los procesos almacenados en caché se congelan y pueden impedir que funcionen las funciones personalizadas.

Como solución alternativa, si una app tiene un proceso que debe realizar actividades mientras están almacenadas en caché, cambia el estado del proceso a no almacenado en caché (como Servicio Bound ForeGround [BFGS] o en primer plano) antes de que el proceso deba realizar cualquier trabajo para permitir que la app permanezca activa.

Prueba el congelador de apps

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

  • Busca una lista de procesos bloqueados con el comando adb shell dumpsys activity y usa grep para Apps frozen:.

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

  • Consulta logcat, que muestra las entradas inmovilizadas y no inmovilizadas cada vez que un proceso migra dentro o fuera del congelador. Por ejemplo:

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