Android 11 QPR3 o versiones posteriores admiten el congelador de apps en caché. Esta función detiene la ejecución de procesos almacenados en caché y reduce el uso de recursos por parte de apps con comportamiento inadecuado que podrían intentar operar mientras están almacenadas en caché. El framework congela las apps almacenadas en caché migrando sus procesos a un cgroup congelado, lo que reduce el consumo de CPU activa y en inactividad 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 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 "Suspender la ejecución de apps 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 en falso o la opción para desarrolladores se inhabilita. Puedes activar o desactivar este parámetro de configuración cambiando la configuración del 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 sí usa las APIs ocultas del sistema setProcessFrozen
y enableFreezer
. Para obtener detalles 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 funciones personalizadas compatibles con procesos que se espera que se ejecuten mientras se almacenan 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 necesita realizar actividades mientras está en caché, cambia el estado del proceso a no almacenado en caché (como Bound ForeGround Service [BFGS] o primer plano) antes de que el proceso necesite realizar cualquier trabajo para permitir que la app permanezca activa.
Cómo probar el congelador de apps
Para verificar que el congelador de apps funcione según lo previsto, usa los siguientes recursos:
Verifica si hay una lista de procesos inactivos con el comando
adb shell dumpsys activity
y grep paraApps frozen:
.Verifica la presencia del archivo
/sys/fs/cgroup/uid_0/cgroup.freeze
.Ver logcat, que muestra las entradas congeladas y descongeladas cada vez que un proceso migra dentro o fuera del congelador Por ejemplo:
adb logcat | grep -i "\(freezing\|froze\)"