Mit dem Preload-Manager können Sie Nutzern ein besseres Erlebnis bieten, indem Sie Inhalte schneller bereitstellen und die Wartezeit beim Wechsel zwischen Elementen verkürzen. Außerdem können Sie die Dauer und das Ranking des Vorabladens für jedes Element anpassen.
In sozialen Medien wird dem Nutzer häufig eine Liste oder ein Karussell mit Medienoptionen angezeigt. In einer App kann beispielsweise ein Karussell mit kurzen Videos angezeigt werden. Wenn ein Video endet, wechselt die App zum nächsten. Wenn dem Nutzer das Video nicht gefällt, kann er zum nächsten oder vorherigen Video wischen.
Wenn Sie keine Videoinhalte vorab laden, kann dies zu einer frustrierenden Nutzererfahrung führen. Der Nutzer sieht sich einige Medien an und muss dann warten, bis die nächsten Medien geladen werden.
Wenn Sie Inhalte jedoch zu aggressiv vorab laden, verschwenden Sie Strom und Netzwerkbandbreite für Inhalte, die der Nutzer möglicherweise nie abspielen wird.
DefaultPreloadManager
kann Ihnen dabei helfen, diese Bedenken in Ihrer App auszugleichen. Der Preload-Manager arbeitet mit Ihrer App zusammen, um zu entscheiden, wie wichtig die einzelnen Media-Elemente sind, und lädt die entsprechende Menge im Voraus.
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:
- Erstellen Sie die
ExoPlayer
-Objekte der App mit demselbenDefaultPreloadManager.Builder
-Objekt, das Sie zum Erstellen des Preload-Managers verwenden. Rufen SieDefaultPreloadManager.Builder.buildExoPlayer()
auf, um einExoPlayer
zu erstellen. - Informieren Sie den Preload-Manager über jedes Media-Element, das er erfassen soll. Das muss nicht der gesamte Inhalt des Karussells sein. Sie können einfach die ersten paar Elemente angeben, die abgespielt werden sollen. Während der Nutzer durch das Karussell navigiert, können Sie Media-Elemente dem Pool des Preload-Managers hinzufügen und daraus entfernen.
- Ungültigmachen der Prioritäten im Preload-Manager, wenn sich der Inhalt des Karussells ändert oder der Nutzer ein anderes Element auswählt. Dadurch wird der Preload-Manager angewiesen, die Priorität jedes Media-Elements neu zu bestimmen und Inhalte bei Bedarf zu laden. Der Preload-Manager wird ungültig, nachdem Sie zum ersten Mal Media-Elemente hinzugefügt haben, wenn der Nutzer von einem Element zum nächsten 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 jeden Artikel vorab geladen werden soll.
Medien aus dem Preload-Manager abrufen, wenn der Nutzer mit der Wiedergabe eines Elements beginnt. Der Preload-Manager gibt Ihrer App ein
MediaSource
für diesen Inhalt.Geben Sie den Preload-Manager frei, wenn Sie ihn nicht mehr benötigen, um seine Ressourcen freizugeben.
Der Preload-Manager führt folgende Schritte aus:
- Darin werden alle Medienelemente gespeichert, die Ihre App hinzugefügt hat.
- Jedes Mal, wenn die Prioritäten ungültig werden, wird Ihre App durch Aufrufen von
TargetPreloadStatusControl
abgefragt, das von Ihrer App implementiert wird. Dadurch wird ermittelt, wie viel von jedem Media-Element geladen werden soll. - Nachdem die App abgefragt wurde, wird die entsprechende Menge der einzelnen Media-Elemente vorab geladen. Der Preload-Manager entscheidet, in welcher Reihenfolge das Element geladen wird. Dabei werden Artikel priorisiert, die dem Artikel, den der Nutzer gerade spielt, am ähnlichsten sind.
- Wenn die App Inhalte anfordert, stellt der Preload-Manager ein
MediaSource
mit 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 gehen wir davon aus, dass in der App ein Karussell mit kurzen Videos angezeigt wird. Das ausgewählte Video wird automatisch abgespielt. Der Nutzer kann das Karussell jedoch in beide Richtungen scrollen. Dadurch wird das aktuell wiedergegebene Video beendet und das Video gestartet, zu dem der Nutzer scrollt.
Alle diese Schritte werden auf den folgenden Seiten ausführlich beschrieben.
- Die App erstellt eine Zielvorabladestatus-Steuerung. Der Preload-Manager fragt diese Steuerung ab, um herauszufinden, wie viel von jedem Media-Element geladen werden soll.
- Die App erstellt ein
DefaultPreloadManager.Builder
und übergibt die Steuerung des Zielvorabladestatus. Die App verwendet dann den Builder, um den Preload-Manager zu erstellen. - Die App fügt dem Preload-Manager Media-Elemente hinzu. Die App stellt für jedes Element einen Index bereit, der die Position des Elements im Karussell angibt.
- Nachdem alle Media hinzugefügt wurden, ruft die App
invalidate()
auf, um dem Preload-Manager mitzuteilen, dass er die Prioritäten für die einzelnen Elemente festlegen und sie dann vorab laden soll. - Für jedes Media-Element ruft der Preload-Manager das Ziel-Preload-Steuerelement auf, um abzufragen, wie viel vom Element geladen werden soll. Die Zielvorabladesteuerung kann angeben, dass eine bestimmte Dauer von Inhalten geladen werden soll, dass nur die Metadaten des Artikels abgerufen werden sollen oder dass der Artikel zu diesem Zeitpunkt nicht abgerufen werden soll. Nachdem der Preload-Manager diese Informationen erhalten hat, beginnt er mit dem Laden der Media-Inhalte.
- Wenn der Nutzer mit der Wiedergabe von Inhalten beginnt, ruft die App den Preload-Manager auf, um eine
MediaSource
für dieses Medienelement anzufordern. Die App ruft auchsetCurrentPlayingIndex()
auf, um dem Preload-Manager mitzuteilen, welches Media-Element gerade wiedergegeben wird. - Wenn der Nutzer zu einem anderen Media-Element wechselt, fordert die App dieses Element vom Preload-Manager an und aktualisiert auch den aktuellen Wiedergabeindex. Anschließend wird
invalidate()
noch einmal aufgerufen, um dem Preload-Manager mitzuteilen, dass er seine Prioritäten basierend auf dem, was jetzt wiedergegeben wird, aktualisieren soll. - Wenn die App dem Karussell Media-Elemente hinzufügt oder daraus entfernt, werden diese Elemente auch dem Preload-Manager hinzugefügt oder daraus entfernt. Anschließend wird
invalidate()
aufgerufen. - Immer wenn die Prioritäten des Preload-Managers ungültig werden, wird die Ziel-Preload-Steuerung noch einmal aufgerufen, um herauszufinden, wie viel von jedem Element geladen werden soll.
- Wenn die App das Karussell schließt, gibt sie den Preload-Manager kostenlos, um Ressourcen freizugeben.