Google se compromete a impulsar la igualdad racial para las comunidades afrodescendientes. Obtén información al respecto.
Se usó la API de Cloud Translation para traducir esta página.
Switch to English

Instantáneas de tareas

Las instantáneas de tareas es una infraestructura introducida en Android 8.0 que combina capturas de pantalla para miniaturas recientes y superficies guardadas del Administrador de ventanas. Las miniaturas recientes representan el último estado de una tarea en la vista Recientes.

Cuando una actividad entró en un estado detenido, el Administrador de ventanas no destruyó las superficies de la actividad mientras esa actividad estuviera en la parte superior de la tarea. Si esta actividad tenía que mostrarse nuevamente, el Administrador de ventanas pudo iniciar la animación sin esperar a que la actividad terminara de dibujar su primer fotograma, ya que pudo usar esta Superficie guardada.

Arquitectura

Los dos conceptos de Miniaturas recientes y Superficies guardadas se unifican con Instantáneas de tareas. Cuando una tarea pasa a segundo plano, el Administrador de ventanas coloca una captura de pantalla de esta tarea en un GraphicBuffer. Mientras la aplicación de la actividad principal de la tarea permanezca en la memoria, este GraphicBuffer se mantendrá en la memoria. Ahora, cuando la misma actividad vuelva al frente, Window Manager creará una ventana de inicio (TaskSnapshotSurface) y adjuntará el GraphicBuffer sin copiar memoria a la cola de búfer de la ventana de inicio. Tan pronto como la actividad haya dibujado su primer fotograma, la ventana de inicio de Instantánea de la tarea se desvanecerá suavemente como las pantallas de presentación normales.

El mismo GraphicBuffer también se envía a través de Binder a SystemUI para usarlo para dibujar el estado de vista previa de una tarea en la vista Recientes. Dado que esto es solo una referencia a un búfer, enviarlo a través de Binder consume pocos recursos. Cuando el GraphicBuffer llega a SystemUI, se envuelve en un mapa de bits de hardware y luego se dibuja en la pantalla sin que se cargue ninguna memoria en la memoria de gráficos.

Beneficios

Hay tres beneficios principales de esta nueva arquitectura:

  • Si la instantánea de la tarea se usa como ventana de inicio, hay un buen fundido cruzado entre la instantánea y el contenido real.
  • Cuando la instantánea de la tarea se dibuja en SystemUI, se puede hacer sin realizar ninguna copia. Anteriormente, el mapa de bits tenía que copiarse en Ashmem y luego en la memoria gráfica. Dado que este método almacena la instantánea directamente en la memoria de gráficos, no es necesario realizar ninguna copia.
  • El estado que ve en Recientes siempre coincide con el estado que verá por primera vez cuando vuelva a abrir la aplicación. Tener el mismo búfer aquí también ahorra mucha memoria. Es por eso que Recents ahora puede mostrar estas imágenes a máxima resolución. Anteriormente, se reducía la muestra en un 64% para ahorrar memoria.

Implementación

Esta función existe íntegramente en la plataforma Android. No se requiere integración y no se admite la personalización. Sin embargo, los fabricantes de dispositivos pueden deshabilitar la función Instantáneas de tareas por completo.

Para deshabilitar esta función, modifique esta función:

frameworks/base/services/core/java/com/android/server/wm/TaskSnapshotController.java#215

Tenga en cuenta que si la función está desactivada, la vista Recientes no mostrará ninguna miniatura.

Instantáneas de alta y baja resolución

Las instantáneas de tareas se escriben en el disco en dos escalas. Al restaurar una instantánea de una tarea desde el disco, las instantáneas de baja resolución se leen primero y luego se reemplazan por su contraparte de alta resolución. Esta optimización mejora los tiempos de carga de la imagen. De lo contrario, podría haber un ligero retraso al leer el archivo de instantánea del disco y el usuario vería una tarjeta de tareas en blanco hasta que la imagen estuviera disponible. Puede configurar las escalas en el archivo de configuración de superposición del dispositivo overlay overlay/frameworks/base/core/res/res/values/config.xml configurando config_highResTaskSnapshotScale y config_lowResTaskSnapshotScale . De forma predeterminada, se establecen en 1.0 y 0.5 respectivamente. Deshabilite las instantáneas de baja resolución configurando config_lowResTaskSnapshotScale en 0.0.

Ejemplos y fuente

Encuentre el resto del código para esta función dentro de los archivos TaskSnapshot * en:

frameworks/base/+/master/services/core/java/com/android/server/wm/