El administrador de precarga te ayuda a brindarles a los usuarios una mejor experiencia, ya que les ofrece contenido más rápido y con menos espera cuando cambian de un elemento a otro. También te permite personalizar la duración y la clasificación de la precarga por elemento.
Una situación común en las redes sociales es que una app le muestra al usuario una lista o un carrusel de opciones de contenido multimedia. Por ejemplo, una app podría mostrar un carrusel de videos cortos. Cuando termina un video, la app cambia al siguiente. Y si al usuario no le gusta el video que está mirando, puede deslizar el dedo para ir al siguiente video, o al anterior.
Si no precargas el contenido de video, esto puede generar una experiencia frustrante para el usuario. El usuario termina de mirar un contenido multimedia y, luego, tiene que esperar a que se cargue el siguiente contenido multimedia.
Por otro lado, si precargas el contenido de forma demasiado agresiva, se desperdician energía y ancho de banda de la red cargando contenido que el usuario nunca reproducirá.
DefaultPreloadManager ayuda a tu app a equilibrar estas inquietudes. El administrador de precarga funciona con tu app para decidir qué tan importante es cada elemento multimedia y carga la cantidad adecuada con anticipación.
División del trabajo
Si usas DefaultPreloadManager, tu código realiza parte del trabajo y el administrador de precarga realiza el resto.
Tu app debe hacer lo siguiente:
- Crear los objetos
ExoPlayerde la app con el mismoDefaultPreloadManager.Builderobjeto que usas para crear el administrador de precarga. Llamar aDefaultPreloadManager.Builder.buildExoPlayer()para crear unExoPlayer. - Informar al administrador de precarga sobre cada elemento multimedia al que debe hacer un seguimiento. Es posible que no sea todo el contenido del carrusel. En su lugar, puedes informarle sobre los primeros elementos que se reproducirán. A medida que el usuario navega por el carrusel, puedes agregar y quitar elementos multimedia del grupo del administrador de precarga.
- Invalidar las prioridades en el administrador de precarga cuando cambia el contenido del carrusel o el usuario cambia el elemento que está reproduciendo. Esto le indica al administrador de precarga que vuelva a determinar la prioridad de cada elemento multimedia, y que cargue el contenido si es necesario. Invalidarás el administrador de precarga después de agregar elementos multimedia por primera vez y también cuando el usuario pase de un elemento a otro, o cuando agregues o quites elementos del carrusel.
- Responder a las consultas del administrador de precarga y decirle al administrador cuánto contenido precargar para cada elemento.
Recuperar contenido multimedia del administrador de precarga cuando el usuario comienza a reproducir un elemento. El administrador de precarga le proporciona a tu app un
MediaSourcepara ese contenido.MediaSourceLiberar el administrador de precarga cuando termines de usarlo para liberar sus recursos.
El administrador de precarga hace lo siguiente:
- Realiza un seguimiento de todos los elementos multimedia que tu app le agregó.
- Cada vez que se invalidan sus prioridades, consulta tu app llamando a un
TargetPreloadStatusControlimplementado por tu app. Llama a esto para averiguar cuánto de cada elemento multimedia cargar. - Después de consultar la app, precarga la cantidad adecuada de cada elemento multimedia. El administrador de precarga decide en qué orden cargar el elemento. Prioriza los elementos que están más cerca del elemento que reproduce el usuario.
- Cuando la app solicita contenido, el administrador de precarga proporciona un
MediaSourcecon el contenido que ya se cargó.
Flujo de trabajo del administrador de precarga
En esta sección, se describe un flujo de trabajo típico para una app que usa el administrador de precarga. En este ejemplo, suponemos que la app muestra un carrusel de videos cortos. El video seleccionado se reproduce automáticamente, pero el usuario puede desplazarse por el carrusel en cualquier dirección, lo que detiene el video que se estaba reproduciendo y comienza el video al que se desplaza.
Todos estos pasos se analizan en detalle en las siguientes páginas.
- La app crea un control de estado de precarga de destino. El administrador de precarga consulta este control para averiguar cuánto de cada elemento multimedia cargar.
- La app crea un
DefaultPreloadManager.Buildery pasa el control de estado de precarga de destino. Luego, la app usa el compilador para crear el administrador de precarga. - La app agrega elementos multimedia al administrador de precarga. La app proporciona un índice para cada elemento, que especifica la posición del elemento en el carrusel.
- Después de agregar todo el contenido multimedia, la app llama a
invalidate()para indicarle al administrador de precarga que establezca las prioridades para cada elemento y, luego, los precargue. - Para cada elemento multimedia, el administrador de precarga llama al control de precarga de destino para consultar cuánto del elemento se debe cargar. El control de precarga de destino puede indicar que se cargue una cierta duración del contenido, que solo se recuperen los metadatos del elemento o que no se recupere ninguno de esos elementos en este momento. Después de que el administrador de precarga obtiene esta información, comienza a cargar el contenido multimedia.
- Cuando el usuario comienza a reproducir contenido, la app llama al administrador de precarga
para solicitar un
MediaSourcepara ese elemento multimedia. La app también llama asetCurrentPlayingIndex()para indicarle al administrador de precarga qué elemento multimedia se está reproduciendo. - Si el usuario se mueve a un elemento multimedia diferente, la app solicita ese elemento a
l administrador de precarga y también actualiza el índice de reproducción actual. Luego, vuelve a llamar a
invalidate()para indicarle al administrador de precarga que actualice sus prioridades en función de lo que se está reproduciendo ahora. - Si la app agrega o quita elementos multimedia al carrusel, también agrega o
quita esos elementos al administrador de precarga y llama a
invalidate()cuando termina de hacerlo. - Cada vez que se invalidan las prioridades del administrador de precarga, este vuelve a llamar al control de precarga de destino para averiguar cuánto de cada elemento cargar.
- Cuando la app cierra el carrusel, libera el administrador de precarga para liberar sus recursos.