Google se compromete a impulsar la igualdad racial para las comunidades afrodescendientes. Obtén información al respecto.

Hibernación de la aplicación

Un usuario promedio de Android instala más de 50 aplicaciones en sus dispositivos (el número aumenta a medida que aumenta el nivel de RAM de los dispositivos). Sin embargo, el usuario no utiliza una cantidad significativa de estas aplicaciones durante un largo período de tiempo.

La hibernación de aplicaciones hiberna las aplicaciones que el usuario no usa durante unos meses, similar a la revocación automática de permisos. Esto fuerza la detención de la aplicación y la coloca en un estado en el que optimizamos el almacenamiento en lugar del rendimiento. El permiso de auto-revocación también se incluye con este estado y comparten la misma configuración de exención en la configuración. Una aplicación detenida por la fuerza no ejecuta trabajos o alertas en segundo plano y no puede enviar notificaciones automáticas. Cuando el usuario usa la aplicación nuevamente, la aplicación sale de la hibernación y los trabajos / alertas / notificaciones se ejecutan nuevamente como de costumbre. Todos los trabajos, alertas o notificaciones que se programaron antes de que la aplicación entrara en hibernación deben reprogramarse.

Los OEM que modifican la plataforma pueden entrar en conflicto con la implementación de la hibernación de la aplicación. Por ejemplo

  • Modificar la definición de uso de la aplicación o introducir formas de activar una aplicación que no está en AOSP puede interrumpir la precisión de la hibernación de la aplicación.
  • El mecanismo de restricción patentado de un OEM similar a la hibernación de la aplicación puede tener un propósito similar. Si bien ambos pueden existir, puede haber cierta superposición.

CDD esboza un nuevo conjunto de requisitos para los cambios que se basan en el uso de aplicaciones, similar a la existente 3.5.1 requisito. La hibernación de la aplicación sigue estos requisitos.

El código marco vive en:

La lógica política vive en:

  • repo: plataforma / paquetes / módulos / Permiso
  • directorio: PermissionController / src / com / android / permisocontroller / hibernación

Arquitectura de alto nivel

El servicio del sistema App Hibernation optimiza las aplicaciones que un usuario usa con poca frecuencia para el almacenamiento y evita que esas aplicaciones se ejecuten en segundo plano. Para lograr estos resultados, cuando hibernamos una aplicación, específicamente:

  • Permisos de revocación automática
  • Forzar la detención de la aplicación
  • Eliminar los archivos ODEX y VDEX
  • Eliminar la caché de la aplicación

Nuestro objetivo es implementar la hibernación como una acción reversible para que la aplicación aún esté disponible para el usuario a través del Lanzador y otras superficies con los datos de la aplicación intactos. Al iniciar la aplicación, la restauraremos desde el estado de detención forzada y continuaremos con la creación de archivos ODEX y VDEX como de costumbre.

El diseño planificado se centra en dos partes principales:

  • determinar cuándo un paquete debe hibernar
  • optimizar el paquete de hibernación

Un nuevo servicio del sistema, AppHibernationService , y un servicio de trabajo, AppHibernationJobService, en PermissionController es el pegamento que controla la toma de decisiones en general y la lógica.

Determinar cuándo un paquete debe hibernación es impulsado principalmente por UsageStatsService y administrado por AppHibernationJobService en PermissionController . Esta lógica política de vidas en PermissionController que nos permiten actualizar dinámicamente a través de la línea principal. Además, tenemos la intención de añadir una nueva señal, el uso de componentes, con el uso de la captura de los componentes del paquete (por ejemplo, servicios, proveedores de contenido) como una nueva métrica en UsageStatsService .

La optimización de un paquete es donde ocurren todos los ahorros / optimizaciones reales. AppHibernationService comunica con varias partes del sistema que deja el paquete de datos de la caché, borrar, arte artefactos borrar, y así sucesivamente. Revocación de permiso se inicia directamente desde AppHibernationJobService para conservar la funcionalidad de auto-revocación en Android 11 y los dispositivos inferiores.

Experiencia de usuario

Al usuario se le proporciona información y controles sobre qué aplicaciones se pueden hibernar.

De manera similar a la revocación automática, el usuario recibe una notificación sobre qué aplicaciones están en hibernación y tiene la opción de ir a Configuración directamente desde la notificación para abrir la aplicación y sacarla de la hibernación o eliminar la aplicación no utilizada si es necesario.

Continuamos respaldando la intención del desarrollador de solicitar al usuario una exención de la hibernación a través de la intención de exención de revocación automática de permisos existentes.

Compatibilidad con versiones anteriores

Las funciones específicas de la hibernación están disponibles a partir de Android 12. Estas funciones no podían funcionar en versiones anteriores porque los componentes de la plataforma (como el nuevo servicio del sistema) no están presentes. La revocación automática sigue funcionando como se implementó actualmente para las versiones anteriores del sistema operativo.

A partir de Android 12, para asegurar la compatibilidad con versiones anteriores, se añade un conmutador de hibernación en la página de la aplicación en virtud de aplicaciones y notificaciones en la configuración mientras se mantiene la palanca original de auto-revocación en el submenú Permisos. Esta palanca controla la exención general del sistema de hibernación de aplicaciones para la aplicación.

Personalización

Dado que parte de la implementación es parte del componente del sistema modular, se desaconseja que los socios modifiquen la función. En cambio, los socios pueden implementar características / funcionalidades similares siempre que sigan los requisitos de CDD.

La hibernación de la aplicación debe estar activada de forma predeterminada para todas las aplicaciones destinadas a Android 11 o superior. Esto es lo mismo que la revocación automática de permisos. Si bien la configuración en sí puede estar ACTIVADA, la implementación de la hibernación de la aplicación puede diferir entre las aplicaciones que tienen como objetivo Android 11 y Android 11 (es decir, la hibernación de la aplicación solo funciona para las aplicaciones que tienen como objetivo Android 11, mientras que esencialmente es solo una revocación automática para las aplicaciones que tienen como objetivo Android 11).

Además, los OEM pueden estar implementando una característica similar. Sin embargo, esas funciones están dirigidas a una escala de tiempo mucho más corta para las optimizaciones de la batería que pueden ser específicas del OEM. Cualquier restricción aplicación similar características desarrolladas por los fabricantes de equipos puede coexistir con el sistema App hibernación como siempre que cumplan con los criterios existentes definidos en CDD .

Pruebas

La hibernación de la aplicación tiene CTS y pruebas unitarias para garantizar que funcione correctamente.