El administrador de carga previa 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 carga previa 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. Si al usuario no le gusta el video que está mirando, puede deslizar el dedo para ver el siguiente o el anterior.
Si no cargas previamente el contenido de video, esto puede generar una experiencia frustrante para el usuario. El usuario termina de ver algún contenido multimedia y, luego, debe esperar a que se cargue el siguiente.
Por otro lado, si cargas previamente el contenido de forma demasiado agresiva, se desperdician energía y ancho de banda de la red cargando contenido que es posible que el usuario nunca reproduzca.
DefaultPreloadManager ayuda a tu app a equilibrar estas inquietudes. El administrador de carga previa trabaja 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 carga previa realiza el resto.
Tu app debe hacer lo siguiente:
- Crea los objetos
ExoPlayerde la app con el mismo objetoDefaultPreloadManager.Builderque usas para crear el administrador de carga previa. Llama aDefaultPreloadManager.Builder.buildExoPlayer()para crear unExoPlayer. - Informa al administrador de carga previa sobre cada elemento multimedia 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 carga previa.
- Responde las consultas del administrador de carga previa y dile cuánto contenido 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 carga previa le proporciona a tu app un
MediaSourcepara ese contenido.Informa al administrador de carga previa el índice del elemento que se está reproduciendo. El administrador de carga previa usa esta información para determinar qué tan cerca está cada elemento multimedia del elemento que se está reproduciendo y prioriza de forma dinámica la carga previa en consecuencia. Cuando el usuario navega a un elemento nuevo, actualiza ese índice con el administrador de carga previa.
Libera el administrador de carga previa 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 le agregó.
- Cada vez que se actualizan sus prioridades, consulta tu app llamando a un
TargetPreloadStatusControlimplementado por tu app. Llama a esto para averiguar cuánto de cada elemento multimedia se debe cargar. - Después de consultar la app, carga previamente 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 reproduce el usuario.
- Cuando la app solicita contenido, el administrador de carga previa proporciona un
MediaSourcecon 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 cuánto de cada elemento multimedia se debe cargar.
- La app crea un
DefaultPreloadManager.Buildery pasa el control de estado de carga previa de destino. Luego, la app usa el compilador para crear el administrador de carga previa manager. - La app agrega elementos multimedia al administrador de carga previa. La app proporciona un índice para cada elemento, que especifica la posición del elemento en el carrusel.
- Para cada elemento multimedia, el administrador de carga previa llama al control de carga previa de destino para consultar cuánto del elemento se debe cargar. El control de carga previa de destino podría 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 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
MediaSourcepara ese elemento multimedia. La app también llama asetCurrentPlayingIndex()para informarle al administrador de carga previa qué elemento multimedia se está reproduciendo, de modo que se actualicen las prioridades de los elementos multimedia. - Cada vez que se actualizan las prioridades del administrador de carga previa, este vuelve a llamar al control de carga previa de destino para averiguar cuánto de cada elemento se debe cargar.
- Cuando la app cierra el carrusel, libera el administrador de carga previa para liberar sus recursos.