Conceitos do gerenciador de pré-carregamento

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 para o anterior.

Se você não fizer o pré-carregamento, a experiência do usuário poderá ser frustrante. 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 vai desperdiçar energia e largura de banda da rede carregando 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:

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 atualizadas, o app é consultado 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 já 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.

  1. 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.
  2. 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.
  3. 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.
  4. Para cada item de mídia, o gerenciador de pré-carga chama o controle de pré-carga 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.
  5. 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 chama setCurrentPlayingIndex() para informar ao gerenciador de pré-carregamento qual item de mídia está sendo reproduzido, para que as prioridades dos itens de mídia sejam atualizadas.
  6. Sempre que as prioridades do gerenciador de pré-carregamento são atualizadas, ele chama o controle de pré-carregamento de destino mais uma vez para descobrir quanto de cada item carregar.
  7. Quando o app fecha o carrossel, ele libera o gerenciador de pré-carregamento para liberar os recursos.