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 paraApps 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\)"