Ce document aborde deux domaines susceptibles de présenter des pièges.
État. Avec "Medialayer", certaines opérations ne sont valides que dans des états spécifiques. Des opérations incorrectes peuvent entraîner des exceptions ou un comportement inattendu.
Ressources : lorsque vous apportez des modifications à la configuration, comme la rotation de l'écran, vous devez libérer un objet
MediaPlayerpour libérer des ressources système et éviter l'épuisement des ressources.
Gérer l'état
MediaPlayer est basé sur l'état. Autrement dit, il possède un état interne dont vous devez toujours être conscient lorsque vous écrivez votre code, car certaines opérations ne sont valides que lorsque le lecteur se trouve dans des états spécifiques. Si vous effectuez une opération dans un état incorrect, le système peut générer une exception ou provoquer d'autres comportements indésirables.
Le diagramme d'état de la documentation de la classe MediaPlayer indique clairement les méthodes qui font passer MediaPlayer d'un état à un autre. Exemple :
- Lorsque vous créez un
MediaPlayer, il est à l'état Idle (Inactif). - Vous l'initialisez en appelant
setDataSource(), ce qui le fait passer à l'état Initialized (Initialisé). - Vous pouvez le préparer à l'aide de la méthode
prepare()ouprepareAsync(). - Une fois que
MediaPlayera fini de se préparer, il passe à l'étatPrepared, ce qui signifie que vous pouvez appelerstart()pour qu'il lise le contenu multimédia.
À ce stade, comme l'illustre le diagramme, vous pouvez passer des états Started, Paused et PlaybackCompleted en appelant des méthodes telles que start(), pause() et seekTo(), entre autres.
Toutefois, lorsque vous appelez stop(), vous ne pouvez plus appeler start() tant que vous n'avez pas préparé à nouveau MediaPlayer.
Gardez toujours le diagramme d'état à l'esprit lorsque vous écrivez du code qui interagit avec un objet MediaPlayer, car l'appel de ses méthodes à partir du mauvais état est une cause fréquente de bugs.
Libérer MediaPlayer
Un MediaPlayer peut consommer de précieuses ressources système. Par conséquent, vous devez toujours prendre des précautions supplémentaires pour vous assurer de ne pas conserver une instance MediaPlayer plus longtemps que nécessaire. Lorsque vous avez terminé, vous devez toujours appeler release() pour vous assurer que toutes les ressources système qui lui sont allouées sont correctement libérées.
Par exemple, si vous utilisez un MediaPlayer et que votre activité reçoit un appel à onStop(), vous devez libérer le MediaPlayer, car il n'a pas beaucoup de sens de le conserver alors que votre activité n'interagit pas avec l'utilisateur (sauf si vous lisez du contenu multimédia en arrière-plan, ce qui est abordé dans la section suivante).
Lorsque votre activité est reprise ou redémarrée, vous devez bien sûr créer un nouveau MediaPlayer et le préparer à nouveau avant de reprendre la lecture.
Voici comment libérer et annuler votre MediaPlayer :
Kotlin
mediaPlayer?.release()
mediaPlayer = null
Java
mediaPlayer.release();
mediaPlayer = null;
Par exemple, réfléchissez aux problèmes qui surviennent si vous oubliez de libérer MediaPlayer lorsque votre activité s'arrête, mais que vous en créez un nouveau lorsque l'activité redémarre. Lorsque l'utilisateur modifie l'orientation de l'écran (ou la configuration de l'appareil d'une autre manière), le système redémarre l'activité par défaut. Vous risquez de consommer rapidement toutes les ressources système lorsque l'utilisateur fait pivoter l'appareil entre les modes portrait et paysage, car à chaque changement d'orientation, vous créez un MediaPlayer que vous ne libérez jamais.
Pour en savoir plus sur les redémarrages de l'environnement d'exécution, consultez Gérer les modifications de l'environnement d'exécution.
Vous vous demandez peut-être ce qui se passe si vous souhaitez continuer à lire des "contenus multimédias en arrière-plan" même lorsque l'utilisateur quitte votre activité, comme le fait l'application musicale intégrée. Dans ce cas, vous avez besoin d'un MediaPlayer contrôlé par un service, comme indiqué dans la section suivante.
En savoir plus
Jetpack Media3 est la solution recommandée pour la lecture de contenus multimédias dans votre application. En savoir plus
Ces pages abordent des sujets liés à l'enregistrement, au stockage et à la lecture de contenus audio et vidéo :