Mit dem Preload-Manager können Sie Nutzern ein besseres Nutzererlebnis bieten, indem Sie ihnen Inhalte schneller bereitstellen und die Wartezeit beim Wechsel von einem Element zum anderen verkürzen. Außerdem können Sie die Dauer und das Ranking des Vorabladens für jedes Element anpassen.
In sozialen Medien ist es üblich, dass eine App dem Nutzer eine Liste oder ein Karussell mit Medien zur Auswahl anzeigt. Beispielsweise kann eine App ein Karussell mit kurzen Videos anzeigen. Wenn ein Video zu Ende ist, wechselt die App zum nächsten. Wenn dem Nutzer das Video nicht gefällt, das er gerade ansieht, kann er zum nächsten oder vorherigen Video wischen.
Wenn Sie Videoinhalte nicht vorab laden, kann dies zu einem frustrierenden Nutzererlebnis führen. Der Nutzer ist mit einem Medium fertig und muss dann warten, bis das nächste geladen ist.
Wenn Sie Inhalte hingegen zu aggressiv vorab laden, verschwenden Sie Strom und Netzwerkbandbreite, da Inhalte geladen werden, die der Nutzer möglicherweise nie abspielt.
DefaultPreloadManager hilft Ihrer App, diese Bedenken auszuräumen. Der Preload-Manager arbeitet mit Ihrer App zusammen, um zu entscheiden, wie wichtig die einzelnen Medienelemente sind, und lädt die entsprechende Menge im Voraus.
Arbeitsverteilung
Wenn Sie DefaultPreloadManager verwenden, wird ein Teil der Arbeit von Ihrem Code und ein Teil vom Preload-Manager erledigt.
Ihre App muss Folgendes tun:
ExoPlayer-Objekte der App mit demselbenDefaultPreloadManager.Builder-Objekt erstellen, mit dem Sie den Preload-Manager erstellen.ExoPlayermitDefaultPreloadManager.Builder.buildExoPlayer()erstellen.- Dem Preload-Manager mitteilen, welche Medienelemente er verfolgen soll. Das müssen nicht alle Inhalte im Karussell sein. Stattdessen können Sie ihm nur die ersten paar Elemente mitteilen, die abgespielt werden sollen. Wenn der Nutzer durch das Karussell navigiert, können Sie dem Pool des Preload-Managers Medienelemente hinzufügen und daraus entfernen.
- Auf Anfragen des Preload-Managers antworten und ihm mitteilen, wie viel Inhalt für jedes Element vorab geladen werden soll.
Medien vom Preload-Manager abrufen, wenn der Nutzer ein Element abspielt. Der Preload-Manager gibt Ihrer App eine
MediaSourcefür diesen Inhalt.Dem Preload-Manager den Index des aktuell wiedergegebenen Elements mitteilen. Anhand dieser Informationen ermittelt der Preload-Manager, wie nah die einzelnen Medienelemente am wiedergegebenen Element sind, und priorisiert das Vorabladen entsprechend dynamisch. Wenn der Nutzer zu einem neuen Element navigiert, aktualisieren Sie diesen Index mit dem Preload-Manager.
Den Preload-Manager freigeben, wenn Sie ihn nicht mehr benötigen, und seine Ressourcen freigeben.
Der Preload-Manager führt folgende Schritte aus:
- Er verfolgt alle Medienelemente, die Ihre App ihm hinzugefügt hat.
- Jedes Mal, wenn seine Prioritäten aktualisiert werden, fragt er Ihre App ab, indem er eine
TargetPreloadStatusControlvon Ihrer App implementierte aufruft. Er ruft diese auf, um zu erfahren, wie viel von jedem Medienelement geladen werden soll. - Nachdem er die App abgefragt hat, lädt er die entsprechende Menge jedes Medienelements vorab. Der Preload-Manager entscheidet, in welcher Reihenfolge die Elemente geladen werden. Er priorisiert Elemente, die dem Element am nächsten sind, das der Nutzer gerade abspielt.
- Wenn die App Inhalte anfordert, stellt der Preload-Manager eine
MediaSourcemit allen bereits geladenen Inhalten bereit.
Workflow des Preload-Managers
In diesem Abschnitt wird ein typischer Workflow für eine App beschrieben, die den Preload-Manager verwendet. In diesem Beispiel wird davon ausgegangen, dass die App ein Karussell mit kurzen Videos anzeigt. Das ausgewählte Video wird automatisch abgespielt, aber der Nutzer kann in beide Richtungen durch das Karussell scrollen. Dadurch wird das Video, das gerade abgespielt wird, beendet und das Video gestartet, zu dem er scrollt.
Alle diese Schritte werden auf den folgenden Seiten ausführlich beschrieben.
- Die App erstellt eine Ziel-Preload-Statussteuerung. Der Preload-Manager fragt diese Steuerung ab, um zu erfahren, wie viel von jedem Medienelement geladen werden soll.
- Die App erstellt einen
DefaultPreloadManager.Builderund übergibt die Ziel-Preload-Statussteuerung. Anschließend erstellt die App mit dem Builder den Preload Manager. - Die App fügt dem Preload-Manager Medienelemente hinzu. Die App gibt für jedes Element einen Index an, der die Position des Elements im Karussell angibt.
- Für jedes Medienelement ruft der Preload-Manager die Ziel-Preload-Steuerung auf, um abzufragen, wie viel von dem Element geladen werden soll. Die Ziel-Preload-Steuerung kann angeben, dass eine bestimmte Dauer von Inhalten geladen werden soll, dass nur die Metadaten des Elements abgerufen werden sollen oder dass derzeit keine Inhalte dieses Elements abgerufen werden sollen. Nachdem der Preload-Manager diese Informationen erhalten hat, beginnt er mit dem Laden der Medieninhalte.
- Wenn der Nutzer mit der Wiedergabe von Inhalten beginnt, ruft die App den Preload-Manager auf
um eine
MediaSourcefür dieses Medienelement anzufordern. Die App ruft auchsetCurrentPlayingIndex()auf, um dem Preload-Manager mitzuteilen, welches Medienelement gerade abgespielt wird, damit die Prioritäten der Medienelemente aktualisiert werden. - Jedes Mal, wenn die Prioritäten des Preload-Managers aktualisiert werden, ruft er die Ziel-Preload-Steuerung noch einmal auf, um zu erfahren, wie viel von jedem Element geladen werden soll.
- Wenn die App das Karussell schließt, gibt sie den Preload-Manager kostenlos, um seine Ressourcen freizugeben.