Ce document présente deux domaines présentant des écueils potentiels.
É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 de configuration, telles que la rotation de l'écran, vous devez libérer un objet
MediaPlayer
pour 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 tenir compte 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 d'autres comportements indésirables.
Le diagramme des états de la documentation de la classe MediaPlayer
indique quelles méthodes déplacent MediaPlayer
d'un état à un autre. Exemple :
- Lorsque vous créez un
MediaPlayer
, il est à l'état Inactif. - Vous l'initialisez en appelant
setDataSource()
, ce qui le met à l'état Initialisé. - Vous le préparez à l'aide de la méthode
prepare()
ouprepareAsync()
. - Une fois la préparation de
MediaPlayer
terminée, il passe à l'étatPrepared
, ce qui signifie que vous pouvez appelerstart()
pour qu'il lise le contenu multimédia.
À ce stade, comme illustré dans le diagramme, vous pouvez passer d'un état Started
, Paused
ou PlaybackCompleted
à un autre en appelant des méthodes telles que start()
, pause()
et seekTo()
, entre autres.
Toutefois, lorsque vous appelez stop()
, notez que vous ne pouvez pas appeler start()
à nouveau tant que vous n'avez pas préparé à nouveau MediaPlayer
.
Gardez toujours à l'esprit le diagramme des états lorsque vous écrivez du code qui interagit avec un objet MediaPlayer
, car appeler ses méthodes à partir du mauvais état est une cause courante de bugs.
Libérer MediaPlayer
Un MediaPlayer
peut consommer d'importantes 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 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 MediaPlayer
, car il n'a guère de sens de le conserver lorsque votre activité n'interagit pas avec l'utilisateur (sauf si vous lisez des contenus multimédias en arrière-plan, ce qui est abordé dans la section suivante).
Lorsque votre activité est reprise ou redémarrée, vous devez bien entendu créer un nouvel élément 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, considérez les problèmes qui surviennent si vous oubliez de libérer MediaPlayer
lorsque votre activité s'arrête, mais que vous en créez une nouvelle lorsque l'activité redémarre. Lorsque l'utilisateur modifie l'orientation de l'écran (ou modifie 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 nouvel élément 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 qu'il 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 Music 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 multimédia dans votre application. En savoir plus
Ces pages traitent des sujets liés à l'enregistrement, au stockage et à la lecture d'audio et de vidéo: