Concetti di Preload Manager

Il gestore del precaricamento ti aiuta a offrire agli utenti un'esperienza migliore fornendo contenuti più rapidamente, con meno attesa quando passano da un elemento all'altro. Ti consente anche di personalizzare la durata e il ranking del precaricamento per elemento.

Una situazione comune nei social media è che un'app mostra all'utente un elenco o un carosello di scelte multimediali. Ad esempio, un'app potrebbe mostrare un carosello di video brevi. Quando un video termina, l'app passa a quello successivo. Se all'utente non piace il video che sta guardando, potrebbe scorrere per passare al video successivo o a quello precedente.

Se non precarichi i contenuti video, l'esperienza utente può essere frustrante. L'utente termina la riproduzione di un contenuto multimediale e deve attendere il caricamento del successivo.

D'altra parte, se precarichi i contenuti in modo troppo aggressivo, sprechi energia e larghezza di banda di rete caricando contenuti che l'utente potrebbe non riprodurre mai.

DefaultPreloadManager aiuta la tua app a bilanciare questi problemi. Il gestore del precaricamento collabora con la tua app per decidere l'importanza di ogni elemento multimediale e carica in anticipo la quantità appropriata.

Divisione del lavoro

Se utilizzi DefaultPreloadManager, parte del lavoro viene svolta dal tuo codice e parte dal gestore del precaricamento.

La tua app deve:

  • Crea gli oggetti ExoPlayer dell'app utilizzando lo stesso oggetto DefaultPreloadManager.Builder che utilizzi per creare il gestore del precaricamento. Chiama DefaultPreloadManager.Builder.buildExoPlayer() per creare un ExoPlayer.
  • Comunica al gestore del precaricamento ogni elemento multimediale da monitorare. Potrebbero non essere tutti i contenuti del carosello. Puoi semplicemente indicare i primi elementi da riprodurre. Man mano che l'utente naviga nel carosello, puoi aggiungere e rimuovere elementi multimediali dal pool del gestore del precaricamento.
  • Invalida le priorità nel gestore del precaricamento quando i contenuti del carosello cambiano o l'utente cambia l'elemento in riproduzione. Questo indica al gestore del precaricamento di determinare nuovamente la priorità di ogni elemento multimediale e di caricare i contenuti, se necessario. Il gestore del precaricamento viene invalidato dopo l'aggiunta iniziale di elementi multimediali, nonché quando l'utente passa da un elemento all'altro o quando aggiungi o rimuovi elementi dal carosello.
  • Rispondi alle domande del gestore del precaricamento, comunicando la quantità di contenuti da precaricare per ogni elemento.
  • Recupera i contenuti multimediali dal gestore del precaricamento quando l'utente inizia a riprodurre un elemento. Il gestore del precaricamento assegna alla tua app un MediaSource per questi contenuti.

  • Rilascia il gestore del precaricamento quando hai finito di utilizzarlo, liberando le sue risorse.

Il gestore del precaricamento esegue le seguenti operazioni:

  • Tiene traccia di tutti gli elementi multimediali che la tua app ha aggiunto.
  • Ogni volta che le sue priorità vengono invalidate, esegue una query sull'app chiamando un TargetPreloadStatusControl implementato dall'app. Lo chiama per scoprire quanto di ogni elemento multimediale caricare.
  • Dopo aver eseguito una query sull'app, precarica la quantità appropriata di ogni elemento multimediale. Il gestore del precaricamento decide l'ordine di caricamento dell'elemento. Dà la priorità agli elementi più vicini a quello riprodotto dall'utente.
  • Quando l'app richiede contenuti, il gestore del precaricamento fornisce un MediaSource con i contenuti già caricati.

Flusso di lavoro del gestore del precaricamento

Questa sezione descrive un flusso di lavoro tipico per un'app che utilizza il gestore del precaricamento. In questo esempio, supponiamo che l'app mostri un carosello di brevi video. Il video selezionato viene riprodotto automaticamente, ma l'utente può scorrere il carosello in entrambe le direzioni, il che interrompe la riproduzione del video in corso e avvia la riproduzione del video a cui scorre.

Tutti questi passaggi sono descritti in dettaglio nelle pagine seguenti.

  1. L'app crea un controllo dello stato di precaricamento della destinazione. Il gestore del precaricamento esegue query su questo controllo per scoprire la quantità di ogni elemento multimediale da caricare.
  2. L'app crea un DefaultPreloadManager.Builder e supera il controllo dello stato di precaricamento della destinazione. L'app utilizza quindi il builder per creare il gestore del precaricamento.
  3. L'app aggiunge elementi multimediali al gestore precaricamento. L'app fornisce un indice per ogni elemento, specificando la posizione dell'elemento nel carosello.
  4. Una volta aggiunti tutti i contenuti multimediali, l'app chiama invalidate() per comunicare al gestore del precaricamento di impostare le priorità per ogni elemento e poi precaricarli.
  5. Per ogni elemento multimediale, il gestore del precaricamento chiama il controllo di precaricamento di destinazione per chiedere quanto dell'elemento deve essere caricato. Il controllo di precaricamento del target potrebbe indicare di caricare una determinata durata dei contenuti, recuperare solo i metadati dell'elemento o non recuperare nessuno di questi elementi in questo momento. Una volta ottenute queste informazioni, il gestore del precaricamento inizia a caricare i contenuti multimediali.
  6. Quando l'utente inizia a riprodurre i contenuti, l'app chiama il gestore del precaricamento per richiedere un MediaSource per quell'elemento multimediale. L'app chiama anche setCurrentPlayingIndex() per comunicare al gestore del precaricamento quale elemento multimediale viene riprodotto.
  7. Se l'utente passa a un altro elemento multimediale, l'app richiede l'elemento al gestore del precaricamento e aggiorna anche l'indice di riproduzione corrente. Chiama di nuovo invalidate() per comunicare al gestore del precaricamento di aggiornare le priorità in base a ciò che viene riprodotto.
  8. Se l'app aggiunge o rimuove elementi multimediali dal carosello, aggiunge o rimuove anche questi elementi dal gestore del precaricamento e chiama invalidate() al termine dell'operazione.
  9. Ogni volta che le priorità del gestore del precaricamento vengono invalidate, chiama di nuovo il controllo del precaricamento di destinazione per scoprire quanto caricare di ogni elemento.
  10. Quando l'app chiude il carosello, rilascia il gestore del precaricamento per liberare le sue risorse.