MediaPlayer-Status und -Ressourcen verwalten

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() oder prepareAsync() vorbereiten.
  • Wenn die MediaPlayer fertig vorbereitet ist, geht sie in den Status Prepared über. Du kannst dann start() 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: