El administrador de carga previa te ayuda a brindarles a los usuarios una mejor experiencia, ya que les muestra el 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 carga previa por elemento.
Una situación común en las redes sociales es que una app muestre una lista o un carrusel de opciones de contenido multimedia al usuario. 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 o al anterior.
Si no precargas el contenido de video, la experiencia del usuario puede ser frustrante. El usuario termina de consumir contenido multimedia y, luego, debe esperar a que se cargue el siguiente.
Por otro lado, si precargas el contenido de forma demasiado agresiva, se desperdiciará energía y ancho de banda de la red cargando contenido que el usuario tal vez nunca reproduzca.
DefaultPreloadManager
ayuda a tu app a equilibrar estas preocupaciones. El administrador de carga previa trabaja con tu app para decidir la importancia de cada elemento multimedia y carga la cantidad adecuada por adelantado.
División del trabajo
Si usas DefaultPreloadManager
, tu código realiza parte del trabajo y el administrador de carga previa realiza el resto.
Tu app debe hacer lo siguiente:
- Crea los objetos
ExoPlayer
de la app con el mismo objetoDefaultPreloadManager.Builder
que usas para crear el administrador de carga previa. Llama aDefaultPreloadManager.Builder.buildExoPlayer()
para crear un objetoExoPlayer
. - Indícale al administrador de carga previa sobre cada elemento multimedia del que debe hacer un seguimiento. Es posible que no sea todo el contenido del carrusel. En cambio, puedes indicarle 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 carga previa.
- Invalida las prioridades en el administrador de carga previa 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 carga previa 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 las consultas del administrador de carga previa y decirle cuánto contenido se debe cargar previamente para cada elemento
Recupera contenido multimedia del administrador de carga previa cuando el usuario comienza a reproducir un elemento. El administrador de precarga le otorga a tu app un objeto
MediaSource
para ese contenido.Libera el administrador de precarga cuando termines de usarlo para liberar sus recursos.
El administrador de carga previa hace lo siguiente:
- Realiza un seguimiento de todos los elementos multimedia que tu app agregó a ella.
- Cada vez que se invalidan sus prioridades, consulta tu app llamando a un
TargetPreloadStatusControl
implementado por tu app para averiguar cuánto de cada elemento multimedia se debe cargar. - Después de consultar la app, precarga la cantidad adecuada de cada elemento multimedia. El administrador de carga previa decide en qué orden cargar el elemento. Prioriza los elementos que están más cerca del elemento que está reproduciendo el usuario.
- Cuando la app solicita contenido, el administrador de carga previa proporciona un
MediaSource
con el contenido que ya se cargó.
Flujo de trabajo del administrador de carga previa
En esta sección, se describe un flujo de trabajo típico para una app que usa el administrador de carga previa. 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 carga previa de destino. El administrador de carga previa consulta este control para averiguar qué cantidad de cada elemento multimedia se debe cargar.
- La app crea un
DefaultPreloadManager.Builder
y pasa el control de estado de precarga de destino. Luego, la app usa el compilador para crear el administrador de carga previa. - La app agrega elementos multimedia al administrador de carga previa. La app proporciona un índice para cada elemento, que especifica su posición en el carrusel.
- Después de agregar todo el contenido multimedia, la app llama a
invalidate()
para indicarle al administrador de carga previa que establezca las prioridades de cada elemento y, luego, los cargue previamente. - Para cada elemento multimedia, el administrador de carga previa llama al control de carga previa de destino para consultar qué cantidad del elemento se debe cargar. El control de carga previa objetivo puede indicar que se cargue una cierta duración de contenido, que solo se recupere los metadatos del elemento o que no se recupere nada de ese elemento en este momento. Después de que el administrador de carga previa obtiene esta información, comienza a cargar el contenido multimedia.
- Cuando el usuario comienza a reproducir contenido, la app llama al administrador de carga previa para solicitar un objeto
MediaSource
para ese elemento multimedia. La app también llama asetCurrentPlayingIndex()
para indicarle al administrador de carga previa qué elemento multimedia se está reproduciendo. - Si el usuario se desplaza a otro elemento multimedia, la app solicita ese elemento al administrador de carga previa y también actualiza el índice de reproducción actual. Luego, vuelve a llamar a
invalidate()
para indicarle al administrador de carga previa que actualice sus prioridades según lo que se está reproduciendo. - Si la app agrega o quita elementos multimedia del carrusel, también los agrega o quita del administrador de carga previa y llama a
invalidate()
cuando termina de hacerlo. - Cada vez que se invalidan las prioridades del administrador de carga previa, este vuelve a llamar al control de carga previa de destino para averiguar qué cantidad de cada elemento se debe cargar.
- Cuando la app cierra el carrusel, libera el administrador de carga previa para liberar sus recursos.