O gerenciador de pré-carregamento ajuda você a oferecer uma experiência melhor aos usuários, veiculando conteúdo mais rápido e com menos espera quando eles trocam de um item para outro. Ela também permite personalizar a duração e a classificação do pré-carregamento por item.
Uma situação comum nas redes sociais é quando um app mostra uma lista ou um carrossel de opções de mídia para o usuário. Por exemplo, um app pode mostrar um carrossel de vídeos curtos. Quando um vídeo termina, o app passa para o próximo. Se o usuário não gostar do vídeo que está assistindo, ele pode deslizar para o próximo ou o anterior.
Se você não fizer o pré-carregamento, isso pode resultar em uma experiência frustrante para o usuário. O usuário termina de assistir um conteúdo e precisa esperar o próximo carregar.
Por outro lado, se você pré-carregar o conteúdo de forma muito agressiva, isso desperdiça energia e largura de banda da rede ao carregar conteúdo que o usuário talvez nunca reproduza.
O DefaultPreloadManager
ajuda seu app a equilibrar essas questões. O gerenciador de pré-carregamento
trabalha com seu app para decidir a importância de cada item de mídia e
carrega a quantidade adequada com antecedência.
Divisão do trabalho
Se você usa DefaultPreloadManager
, parte do trabalho é feita pelo seu código e parte pelo
gerenciador de pré-carregamento.
O app precisa fazer o seguinte:
- Crie os objetos
ExoPlayer
do app usando o mesmo objetoDefaultPreloadManager.Builder
que você usa para criar o gerenciador de pré-carregamento. ChameDefaultPreloadManager.Builder.buildExoPlayer()
para criar umExoPlayer
. - Informe ao gerenciador de pré-carregamento sobre cada item de mídia que ele precisa rastrear. Não precisa ser todo o conteúdo do carrossel. Basta informar os primeiros itens a serem reproduzidos. À medida que o usuário navega pelo carrossel, é possível adicionar e remover itens de mídia do pool do gerenciador de pré-carregamento.
- Invalide as prioridades no gerenciador de pré-carregamento quando o conteúdo do carrossel mudar ou quando o usuário mudar o item que está sendo reproduzido. Isso informa ao gerenciador de pré-carregamento para redeterminar a prioridade de cada item de mídia e carregar o conteúdo, se necessário. Você vai invalidar o gerenciador de pré-carregamento depois de adicionar itens de mídia pela primeira vez e também quando o usuário passar de um item para outro ou quando você adicionar ou remover itens do carrossel.
- Responda às consultas do gerenciador de pré-carregamento, informando quanto conteúdo pré-carregar para cada item.
Busque mídia do gerenciador de pré-carregamento quando o usuário começar a reproduzir um item. O gerenciador de pré-carregamento dá ao app um
MediaSource
para esse conteúdo.Libere o gerenciador de pré-carga quando terminar de usá-lo, liberando os recursos dele.
O gerenciador de pré-carregamento faz o seguinte:
- Ele acompanha todos os itens de mídia que o app adicionou.
- Cada vez que as prioridades são invalidadas, ele consulta seu app chamando um
TargetPreloadStatusControl
implementado pelo app. Ele faz isso para descobrir quanto de cada item de mídia carregar. - Depois de consultar o app, ele pré-carrega a quantidade adequada de cada item de mídia. O gerenciador de pré-carregamento decide em que ordem carregar o item. Ele prioriza os itens mais próximos do que o usuário está tocando.
- Quando o app solicita conteúdo, o gerenciador de pré-carregamento fornece um
MediaSource
com o conteúdo que já foi carregado.
Fluxo de trabalho do gerenciador de pré-carregamento
Esta seção descreve um fluxo de trabalho típico para um app que usa o gerenciador de pré-carregamento. Neste exemplo, vamos supor que o app mostre um carrossel de vídeos curtos. O vídeo selecionado é reproduzido automaticamente, mas o usuário pode rolar o carrossel em qualquer direção, o que interrompe o vídeo em exibição e inicia o vídeo para o qual ele rola.
Todas essas etapas são discutidas em detalhes nas páginas a seguir.
- O app cria um controle de status de pré-carregamento de destino. O gerenciador de pré-carregamento consulta esse controle para descobrir quanto de cada item de mídia carregar.
- O app cria um
DefaultPreloadManager.Builder
e transmite o controle de status de pré-carregamento de destino. Em seguida, o app usa o builder para criar o gerenciador de pré-carregamento. - O app adiciona itens de mídia ao gerenciador de pré-carregamento. O app fornece um índice para cada item, especificando a posição dele no carrossel.
- Depois que toda a mídia é adicionada, o app chama
invalidate()
para informar ao gerenciador de pré-carregamento que defina as prioridades de cada item e faça o pré-carregamento. - Para cada item de mídia, o gerenciador de pré-carregamento chama o controle de pré-carregamento de destino para consultar quanto do item deve ser carregado. O controle de pré-carregamento de destino pode dizer para carregar uma determinada duração de conteúdo, apenas buscar os metadados do item ou não buscar nada desse item no momento. Depois que o gerenciador de pré-carregamento recebe essas informações, ele começa a carregar o conteúdo de mídia.
- Quando o usuário começa a reproduzir conteúdo, o app chama o gerenciador de pré-carregamento
para solicitar um
MediaSource
para esse item de mídia. O app também chamasetCurrentPlayingIndex()
para informar ao gerenciador de pré-carregamento qual item de mídia está sendo reproduzido. - Se o usuário passar para outro item de mídia, o app vai solicitar esse item ao
gerenciador de pré-carregamento e também atualizar o índice de reprodução atual. Em seguida, ele
chama
invalidate()
novamente para informar ao gerenciador de pré-carregamento que atualize as prioridades com base no que está sendo reproduzido. - Se o app adicionar ou remover itens de mídia do carrossel, ele também vai adicionar ou
remover esses itens do gerenciador de pré-carregamento e chamar
invalidate()
quando isso for concluído. - Sempre que as prioridades do gerenciador de pré-carregamento são invalidadas, ele chama o controle de pré-carregamento de destino mais uma vez para descobrir quanto de cada item carregar.
- Quando o app fecha o carrossel, ele libera o gerenciador de pré-carregamento para liberar os recursos.