Le gestionnaire de préchargement vous aide à offrir une meilleure expérience aux utilisateurs en leur fournissant du contenu plus rapidement, avec moins d'attente lorsqu'ils passent d'un élément à un autre. Il vous permet également de personnaliser la durée et le classement du préchargement par élément.
Dans les réseaux sociaux, il est courant qu'une application affiche une liste ou un carrousel de choix multimédias à l'utilisateur. Par exemple, une application peut afficher un carrousel de vidéos courtes. Lorsqu'une vidéo se termine, l'application passe à la suivante. Et si l'utilisateur n'aime pas la vidéo qu'il regarde, il peut balayer l'écran pour passer à la vidéo suivante ou précédente.
Si vous ne préchargez pas le contenu vidéo, l'expérience utilisateur peut être frustrante. L'utilisateur termine de regarder un contenu multimédia, puis doit attendre le chargement du suivant.
En revanche, si vous préchargez le contenu de manière trop agressive, vous gaspillez de l'énergie et de la bande passante réseau pour charger du contenu que l'utilisateur ne lira peut-être jamais.
DefaultPreloadManager
aide votre application à trouver un équilibre entre ces préoccupations. Le gestionnaire de préchargement fonctionne avec votre application pour déterminer l'importance de chaque élément multimédia et charge la quantité appropriée à l'avance.
Division du travail
Si vous utilisez DefaultPreloadManager
, une partie du travail est effectuée par votre code et une autre par le gestionnaire de préchargement.
Votre application doit effectuer les opérations suivantes :
- Créez les objets
ExoPlayer
de l'application en utilisant le même objetDefaultPreloadManager.Builder
que celui utilisé pour créer le gestionnaire de préchargement. AppelezDefaultPreloadManager.Builder.buildExoPlayer()
pour créer unExoPlayer
. - Indiquez au gestionnaire de préchargement chaque élément multimédia qu'il doit suivre. Il ne s'agit peut-être pas de tout le contenu du carrousel. Vous pouvez simplement lui indiquer les premiers éléments à lire. À mesure que l'utilisateur parcourt le carrousel, vous pouvez ajouter et supprimer des éléments multimédias du pool du gestionnaire de préchargement.
- Invalidez les priorités dans le gestionnaire de préchargement lorsque le contenu du carrousel change ou que l'utilisateur change l'élément qu'il lit. Cela indique au gestionnaire de préchargement de redéterminer la priorité de chaque élément multimédia et de charger le contenu si nécessaire. Vous invaliderez le gestionnaire de préchargement après avoir ajouté des éléments multimédias pour la première fois, mais aussi lorsque l'utilisateur passera d'un élément à un autre, ou lorsque vous ajouterez ou supprimerez des éléments dans le carrousel.
- Répondez aux requêtes du gestionnaire de préchargement en lui indiquant la quantité de contenu à précharger pour chaque élément.
Récupérez le contenu multimédia à partir du gestionnaire de préchargement lorsque l'utilisateur commence à lire un élément. Le gestionnaire de préchargement attribue à votre application un
MediaSource
pour ce contenu.Libérez le gestionnaire de préchargement lorsque vous n'en avez plus besoin pour libérer ses ressources.
Le gestionnaire de préchargement effectue les opérations suivantes :
- Il permet de suivre tous les éléments multimédias que votre application y a ajoutés.
- Chaque fois que ses priorités sont invalidées, il interroge votre application en appelant un
TargetPreloadStatusControl
implémenté par votre application. Il l'appelle pour savoir combien de chaque élément multimédia charger. - Après avoir interrogé l'application, il précharge la quantité appropriée de chaque élément multimédia. Le gestionnaire de préchargement décide de l'ordre de chargement de l'élément. Il donne la priorité aux éléments les plus proches de celui que l'utilisateur est en train de lire.
- Lorsque l'application demande du contenu, le gestionnaire de préchargement fournit un
MediaSource
avec le contenu déjà chargé.
Workflow du gestionnaire de préchargement
Cette section décrit un workflow type pour une application qui utilise le gestionnaire de préchargement. Dans cet exemple, nous partons du principe que l'application affiche un carrousel de vidéos courtes. La vidéo sélectionnée est lue automatiquement, mais l'utilisateur peut faire défiler le carrousel dans les deux sens, ce qui arrête la vidéo en cours de lecture et lance celle sur laquelle il s'arrête.
Toutes ces étapes sont décrites en détail dans les pages suivantes.
- L'application crée un contrôle de l'état de préchargement cible. Le gestionnaire de préchargement interroge ce contrôle pour déterminer la quantité de chaque élément multimédia à charger.
- L'application crée un
DefaultPreloadManager.Builder
et transmet le contrôle de l'état de préchargement cible. L'application utilise ensuite le compilateur pour créer le gestionnaire de préchargement. - L'application ajoute des éléments multimédias au gestionnaire de préchargement. L'application fournit un index pour chaque élément, spécifiant sa position dans le carrousel.
- Une fois tous les éléments multimédias ajoutés, l'application appelle
invalidate()
pour indiquer au gestionnaire de préchargement de définir les priorités de chaque élément, puis de les précharger. - Pour chaque élément multimédia, le gestionnaire de préchargement appelle le contrôle de préchargement cible pour déterminer la quantité de l'élément à charger. La commande de préchargement cible peut indiquer de charger une certaine durée de contenu, de récupérer uniquement les métadonnées de l'élément ou de ne récupérer aucun de ces éléments pour le moment. Une fois que le gestionnaire de préchargement a obtenu ces informations, il commence à charger le contenu multimédia.
- Lorsque l'utilisateur commence à lire du contenu, l'application appelle le gestionnaire de préchargement pour demander un
MediaSource
pour cet élément multimédia. L'application appelle égalementsetCurrentPlayingIndex()
pour indiquer au gestionnaire de préchargement l'élément multimédia en cours de lecture. - Si l'utilisateur passe à un autre élément multimédia, l'application demande cet élément au gestionnaire de préchargement et met également à jour l'index de lecture actuel. Il appelle ensuite
invalidate()
à nouveau pour indiquer au gestionnaire de préchargement de mettre à jour ses priorités en fonction de ce qui est en cours de lecture. - Si l'application ajoute ou supprime des éléments multimédias dans le carrousel, elle les ajoute ou les supprime également dans le gestionnaire de préchargement, et appelle
invalidate()
une fois cette opération terminée. - Chaque fois que les priorités du gestionnaire de préchargement sont invalidées, il appelle à nouveau le contrôle de préchargement cible pour déterminer la quantité de chaque élément à charger.
- Lorsque l'application ferme le carrousel, elle libère le gestionnaire de préchargement pour libérer ses ressources.