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 zu einem anderen verkürzen. Außerdem können Sie die Dauer und das Ranking des Vorabladens für jedes Element anpassen.
In sozialen Medien wird Nutzern häufig eine Liste oder ein Karussell mit Medienoptionen angezeigt. 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, das er sich ansieht, nicht gefällt, 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 zu aggressiv vorab laden, wird hingegen Strom und Netzwerkbandbreite verschwendet, da Inhalte geladen werden, die der Nutzer möglicherweise nie abspielt.
DefaultPreloadManager hilft Ihrer App, diese Probleme auszugleichen. Der Preload-Manager arbeitet mit Ihrer App zusammen, um die Wichtigkeit der einzelnen Medienelemente zu bestimmen und die entsprechende Menge vorab zu laden.
Arbeitsteilung
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. Sie können ihm stattdessen nur die ersten paar Elemente mitteilen, die abgespielt werden sollen. Während der Nutzer durch das Karussell navigiert, können Sie dem Pool des Preload-Managers Medienelemente hinzufügen und entfernen.
- Die Prioritäten im Preload-Manager ungültig machen, wenn sich die Inhalte in m Karussell ändern oder der Nutzer das abgespielte Element ändert. Dadurch wird der Preload-Manager angewiesen, die Priorität der einzelnen Medienelemente neu zu bestimmen und bei Bedarf Inhalte zu laden. Sie machen den Preload-Manager ungültig, nachdem Sie zum ersten Mal Medienelemente hinzugefügt haben, und auch, wenn der Nutzer von einem Element zu einem anderen wechselt oder wenn Sie dem Karussell Elemente hinzufügen oder 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 diese Inhalte.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 ungültig gemacht werden, fragt er Ihre App ab, indem er eine
TargetPreloadStatusControlvon Ihrer App implementierte aufruft. Er ruft dies auf, um herauszufinden, 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, das der Nutzer gerade abspielt, am nächsten sind.
- 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 abgespielte Video 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.
- Nachdem alle Medien hinzugefügt wurden, ruft die App
invalidate()auf, um den Preload-Manager anzuweisen, die Prioritäten für die einzelnen Elemente festzulegen und sie dann vorab zu laden. - 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 Inhalte abspielt, 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 abgespielt wird. - Wenn der Nutzer zu einer anderen Mediendatei wechselt, fordert die App dieses Element vom Preload-Manager an und aktualisiert auch den Index des aktuell abgespielten Elements. Anschließend ruft sie noch einmal
invalidate()auf, um den Preload-Manager anzuweisen, seine Prioritäten basierend auf dem aktuell abgespielten Element zu aktualisieren. - Wenn die App dem Karussell Medienelemente hinzufügt oder daraus entfernt, fügt sie diese Elemente auch dem Preload-Manager hinzu oder entfernt sie daraus und ruft
invalidate()auf, wenn sie damit fertig ist. - Jedes Mal, wenn die Prioritäten des Preload-Managers ungültig gemacht werden, ruft er noch einmal die Ziel-Preload-Steuerung 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.