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 ist es üblich, dass eine App dem Nutzer eine Liste oder ein Karussell mit Media-Optionen anzeigt. 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 Videoinhalte nicht vorab laden, kann dies zu einer frustrierenden Nutzererfahrung führen. Der Nutzer sieht sich ein Medium an und muss dann warten, bis das nächste geladen wird.
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 hilft Ihrer App, diese Bedenken auszugleichen. Der Preload-Manager arbeitet mit Ihrer App zusammen, um die Wichtigkeit der einzelnen Media-Elemente zu bestimmen und die entsprechende Menge im Voraus 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:
- 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 einExoPlayerzu 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 reagieren und ihm mitteilen, wie viele Inhalte für die einzelnen Artikel vorab geladen werden sollen.
Medien aus dem Preload-Manager abrufen, wenn der Nutzer mit der Wiedergabe eines Elements beginnt. Der Preload-Manager gibt Ihrer App ein
MediaSourcefü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
TargetPreloadStatusControlabgefragt, 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
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 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 dieses Steuerelement ab, um herauszufinden, wie viel von jedem Media-Element geladen werden soll.
- Die App erstellt ein
DefaultPreloadManager.Builderund ü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
MediaSourcefür dieses Medienelement anzufordern. Die App ruft auchsetCurrentPlayingIndex()auf, um dem Preload-Manager mitzuteilen, welche Mediendatei 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.