In diesem Dokument werden zwei Bereiche mit potenziellen Fallstricken behandelt.
Status Bei „Medialayer“ sind bestimmte Vorgänge nur in bestimmten Status gültig. Falsche Vorgänge können zu Ausnahmen oder unerwartetem Verhalten führen.
Ressourcen: Wenn Sie Konfigurationsänderungen vornehmen, z. B. die Bildschirmdrehung, müssen Sie ein
MediaPlayer
-Objekt freigeben, um Systemressourcen freizugeben und eine Ressourcenausschöpfung zu vermeiden.
Status verwalten
MediaPlayer
ist statusbasiert. Das bedeutet, dass er einen internen Status hat, den du beim Schreiben deines Codes immer beachten musst, da bestimmte Vorgänge nur gültig sind, wenn sich der Player in bestimmten Status befindet. Wenn Sie einen Vorgang ausführen, während sich das System im falschen Status befindet, kann das System eine Ausnahme auslösen oder zu anderen unerwünschten Verhaltensweisen führen.
Das Zustandsdiagramm in der Klassendokumentation von MediaPlayer
verdeutlicht, mit welchen Methoden MediaPlayer
von einem Zustand in einen anderen wechselt. Beispiel:
- Wenn Sie eine neue
MediaPlayer
erstellen, befindet sie sich im Status Inaktiv. - Sie initialisieren sie durch Aufrufen von
setDataSource()
, wodurch der Status in Initialized (Initialisiert) geändert wird. - Sie können sie entweder mit der Methode
prepare()
oderprepareAsync()
vorbereiten. - Wenn die
MediaPlayer
fertig vorbereitet ist, geht sie in den StatusPrepared
über. Du kannst dannstart()
aufrufen, um die Medien abzuspielen.
Wie das Diagramm zeigt, können Sie dann zwischen den Status Started
, Paused
und PlaybackCompleted
wechseln, indem Sie unter anderem Methoden wie start()
, pause()
und seekTo()
aufrufen.
Wenn Sie stop()
aufrufen, können Sie start()
jedoch erst wieder aufrufen, wenn Sie MediaPlayer
noch einmal vorbereitet haben.
Denken Sie immer an das Statusdiagramm, wenn Sie Code schreiben, der mit einem MediaPlayer
-Objekt interagiert. Der Aufruf der Methoden aus dem falschen Status ist eine häufige Ursache für Fehler.
MediaPlayer freigeben
Ein MediaPlayer
kann wertvolle Systemressourcen beanspruchen. Daher sollten Sie immer zusätzliche Vorkehrungen treffen, damit Sie eine MediaPlayer
-Instanz nicht länger als nötig aufbewahren. Wenn Sie fertig sind, sollten Sie immer release()
aufrufen, damit alle zugewiesenen Systemressourcen ordnungsgemäß freigegeben werden.
Wenn Sie beispielsweise eine MediaPlayer
verwenden und Ihre Aktivität einen Aufruf an onStop()
erhält, müssen Sie die MediaPlayer
freigeben. Es macht keinen Sinn, sie zu behalten, während Ihre Aktivität nicht mit dem Nutzer interagiert, es sei denn, Sie spielen Medien im Hintergrund ab (siehe nächster Abschnitt).
Wenn Ihre Aktivität fortgesetzt oder neu gestartet wird, müssen Sie natürlich eine neue MediaPlayer
erstellen und sie noch einmal vorbereiten, bevor Sie die Wiedergabe fortsetzen können.
So kannst du deine MediaPlayer
veröffentlichen und dann aufheben:
Kotlin
mediaPlayer?.release()
mediaPlayer = null
Java
mediaPlayer.release();
mediaPlayer = null;
Stellen Sie sich beispielsweise vor, Sie vergessen, MediaPlayer
freizugeben, wenn die Aktivität beendet wird, und erstellen stattdessen eine neue, wenn die Aktivität wieder beginnt. Wenn der Nutzer die Bildschirmausrichtung ändert (oder die Gerätekonfiguration auf andere Weise ändert), startet das System die Aktivität standardmäßig neu. Wenn der Nutzer das Gerät zwischen Hoch- und Querformat hin- und herdreht, können Sie schnell alle Systemressourcen verbrauchen, da bei jeder Ausrichtungsänderung eine neue MediaPlayer
erstellt wird, die nie freigegeben wird.
Weitere Informationen zu Laufzeitneustarts finden Sie unter Laufzeitänderungen verarbeiten.
Sie fragen sich vielleicht, was passiert, wenn Sie „Medien im Hintergrund“ auch dann weiter abspielen möchten, wenn der Nutzer Ihre Aktivität verlässt, ähnlich wie bei der integrierten Musik-App. In diesem Fall benötigen Sie einen MediaPlayer
, der von einem Dienst gesteuert wird, wie im nächsten Abschnitt erläutert.
Weitere Informationen
Jetpack Media3 ist die empfohlene Lösung für die Medienwiedergabe in Ihrer App. Weitere Informationen
Auf diesen Seiten finden Sie Themen zum Aufzeichnen, Speichern und Abspielen von Audio- und Videoinhalten: