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
MediaPlayererstellen, 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()oderprepareAsync()vor. - Wenn die Vorbereitung des
MediaPlayerabgeschlossen ist, wechselt er in den StatusPrepared. Das bedeutet, dass Siestart()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: