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 Ausnahmen oder unerwartetes Verhalten verursachen.

  • Ressourcen Wenn Sie Konfigurationsänderungen vornehmen, z. B. die Bildschirmausrichtung ändern, müssen Sie ein MediaPlayer-Objekt freigeben, um Systemressourcen freizugeben und eine Ressourcenüberlastung zu vermeiden.

Status verwalten

MediaPlayer ist statusbasiert. Das heißt, es hat einen internen Status, den Sie beim Schreiben von Code immer im Blick behalten müssen, da bestimmte Vorgänge nur gültig sind, wenn sich der Player in bestimmten Status befindet. Wenn Sie einen Vorgang ausführen, während Sie sich im falschen Status befinden, kann das System eine Ausnahme auslösen oder andere unerwünschte Verhaltensweisen verursachen.

Das Statusdiagramm in der MediaPlayer-Klassendokumentation verdeutlicht , mit welchen Methoden der MediaPlayer von einem Status in einen anderen wechselt. Beispiel:

  • Wenn Sie einen neuen MediaPlayer erstellen, befindet er sich im Status Idle.
  • Sie initialisieren ihn mit setDataSource(), wodurch er in den Status Initialized wechselt.
  • Sie bereiten ihn mit der Methode prepare() oder prepareAsync() vor.
  • Wenn die Vorbereitung des MediaPlayer abgeschlossen ist, wechselt er in den Status Prepared . Das bedeutet, dass Sie start() aufrufen können, um die Wiedergabe der Medien zu starten.

An diesem Punkt können Sie, wie im Diagramm dargestellt, zwischen den Started, Paused und PlaybackCompleted Status wechseln, indem Sie unter anderem Methoden wie start(), pause(), und seekTo() aufrufen.

Wenn Sie jedoch stop() aufrufen, können Sie start() erst wieder aufrufen, nachdem Sie den MediaPlayer noch einmal vorbereitet haben.

Behalten Sie das Statusdiagramm immer im Blick, wenn Sie Code schreiben, der mit einem MediaPlayer Objekt interagiert. Das Aufrufen der Methoden aus dem falschen Status ist eine häufige Ursache für Fehler.

MediaPlayer freigeben

Ein MediaPlayer kann wertvolle Systemressourcen verbrauchen. Daher sollten Sie immer zusätzliche Vorsichtsmaßnahmen treffen, um sicherzustellen, dass Sie eine MediaPlayer-Instanz nicht länger als nötig behalten. Wenn Sie fertig sind, sollten Sie immer release() aufrufen, um sicherzustellen, dass alle zugewiesenen Systemressourcen ordnungsgemäß freigegeben werden.

Wenn Sie beispielsweise einen MediaPlayer verwenden und Ihre Aktivität einen Aufruf von onStop() erhält, müssen Sie den MediaPlayer freigeben. Es ist wenig sinnvoll, ihn zu behalten, während Ihre Aktivität nicht mit dem Nutzer interagiert (es sei denn, Sie geben Medien im Hintergrund wieder, was im nächsten Abschnitt behandelt wird).

Wenn Ihre Aktivität fortgesetzt oder neu gestartet wird, müssen Sie natürlich einen neuen MediaPlayer erstellen und ihn noch einmal vorbereiten, bevor Sie die Wiedergabe fortsetzen.

So geben Sie Ihren MediaPlayer frei und setzen ihn dann auf null:

Kotlin

mediaPlayer?.release()
mediaPlayer = null

Java

mediaPlayer.release();
mediaPlayer = null;

Betrachten Sie beispielsweise die Probleme, die auftreten, wenn Sie vergessen, den MediaPlayer freizugeben, wenn Ihre Aktivität beendet wird, aber einen neuen erstellen, wenn die Aktivität wieder gestartet wird. Wenn der Nutzer die Bildschirmausrichtung ändert (oder die Gerätekonfiguration auf andere Weise ändert), startet das System die Aktivität standardmäßig neu. Möglicherweise verbrauchen Sie schnell alle Systemressourcen, wenn der Nutzer das Gerät zwischen Hoch- und Querformat hin und her dreht, da Sie bei jeder Änderung der Ausrichtung einen neuen MediaPlayer erstellen, den Sie nie freigeben.

Weitere Informationen zu Neustarts der Laufzeit finden Sie unter Laufzeitänderungen verarbeiten.

Vielleicht fragen Sie sich, was passiert, wenn Sie „Hintergrundmedien“ auch dann weitergeben 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 beschrieben.

Weitere Informationen

Jetpack Media3 ist die empfohlene Lösung für die Medienwiedergabe in Ihrer App. Weitere Informationen

Auf diesen Seiten werden Themen im Zusammenhang mit dem Aufzeichnen, Speichern und Wiedergeben von Audio und Video behandelt: