Congelador de aplicaciones en caché

Android 11 QPR3 o superior admite el congelador de aplicaciones en caché. Esta característica detiene la ejecución de procesos almacenados en caché y reduce el uso de recursos al comportarse mal las aplicaciones que podrían intentar funcionar mientras están 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 activas en caché. El congelador de aplicaciones se puede habilitar mediante un indicador de configuración del sistema o una opción de desarrollador.

Implementar el congelador de aplicaciones

El congelador de aplicaciones en caché aprovecha el congelador de kernel cgroup v2. Los dispositivos que se envían con un kernel compatible pueden (opcionalmente) habilitarlo. Para hacerlo, habilite la opción de desarrollador "Suspender la ejecución de aplicaciones almacenadas en caché" o establezca 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 utiliza las API ocultas del sistema setProcessFrozen y enableFreezer . Para obtener detalles sobre estas API, consulte Process.java de ActivityManager y la API ActivityManagerService. Los desarrolladores también pueden consultar el código del cliente en ActivityManager para realizar experimentos.

Manejar funciones personalizadas

Normalmente, no se espera que los procesos realicen ningún trabajo cuando están almacenados en caché, pero algunas aplicaciones pueden tener funciones personalizadas compatibles con procesos que se espera que se ejecuten mientras están almacenados 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á 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 la aplicación. para permanecer activo.

Prueba el congelador de aplicaciones

Para verificar que el congelador de aplicaciones esté funcionando según lo previsto, utilice los siguientes recursos:

  • Busque una lista de procesos congelados utilizando el comando adb shell dumpsys activity y utilice la palabra clave Frozen .

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

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

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