Dokumen ini membahas dua area yang berpotensi menimbulkan masalah.
Status. Dengan "Medialayer`, operasi tertentu hanya valid dalam status tertentu. Operasi yang salah dapat menyebabkan pengecualian atau perilaku yang tidak terduga.
Resource Saat melakukan perubahan konfigurasi, seperti rotasi layar, Anda harus melepaskan objek
MediaPlayeruntuk mengosongkan resource sistem dan menghindari kehabisan resource.
Mengelola status
MediaPlayer berbasis status. Artinya, pemutar memiliki status internal yang harus selalu Anda perhatikan saat menulis kode, karena operasi tertentu hanya valid saat pemutar berada dalam status tertentu. Jika Anda melakukan operasi dalam
status yang salah, sistem mungkin akan menampilkan pengecualian atau menyebabkan perilaku
lain yang tidak diinginkan.
Diagram status dalam dokumentasi class MediaPlayer menjelaskan
metode mana yang memindahkan MediaPlayer dari satu status
ke status lainnya. Contoh:
- Saat Anda membuat
MediaPlayerbaru, class tersebut akan berada dalam status Tidak ada aktivitas. - Anda menginisialisasinya dengan memanggil
setDataSource(), yang mengubahnya menjadi status Diinisialisasi. - Anda menyiapkannya menggunakan metode
prepare()atauprepareAsync(). - Setelah selesai disiapkan,
MediaPlayerakan beralih ke statusPrepared, yang berarti Anda dapat memanggilstart()agar memutar media.
Pada saat itu, seperti yang diilustrasikan oleh diagram, Anda dapat berpindah antarstatus Started,
Paused, dan PlaybackCompleted dengan memanggil metode seperti
start(), pause(), dan seekTo(), di antara metode lainnya.
Namun, saat memanggil stop(), perhatikan bahwa Anda tidak dapat lagi memanggil start()
sampai Anda menyiapkan MediaPlayer lagi.
Selalu ingat diagram status saat menulis kode yang berinteraksi dengan
objek MediaPlayer, karena memanggil metodenya dari status yang salah
sering kali menjadi penyebab munculnya bug.
Merilis MediaPlayer
MediaPlayer dapat menggunakan resource sistem yang berharga. Oleh karena itu, Anda
harus selalu melakukan tindakan pencegahan tambahan untuk memastikan Anda tidak mempertahankan
instance MediaPlayer lebih lama dari yang diperlukan. Setelah selesai,
Anda harus selalu memanggil release() untuk memastikan setiap resource sistem
yang dialokasikan untuknya dirilis dengan benar.
Misalnya, jika Anda menggunakan MediaPlayer dan aktivitas Anda menerima
panggilan ke onStop(), Anda harus melepaskan MediaPlayer, karena
tidak masuk akal untuk mempertahankannya saat aktivitas Anda tidak berinteraksi dengan
pengguna (kecuali jika Anda memutar media di latar belakang, yang akan dibahas di
bagian berikutnya).
Saat aktivitas dilanjutkan atau dimulai ulang, Anda tentu harus membuat
MediaPlayer baru dan mempersiapkannya lagi sebelum melanjutkan pemutaran.
Berikut cara merilis dan menghapus MediaPlayer:
Kotlin
mediaPlayer?.release()
mediaPlayer = null
Java
mediaPlayer.release();
mediaPlayer = null;
Misalnya, pertimbangkan masalah yang muncul jika Anda lupa merilis
MediaPlayer saat aktivitas dihentikan, tetapi membuat yang baru saat
aktivitas dimulai lagi. Saat pengguna mengubah orientasi layar (atau mengubah
konfigurasi perangkat dengan cara lain), sistem akan memulai ulang aktivitas secara
default. Anda mungkin menggunakan semua resource sistem dengan cepat saat pengguna
memutar perangkat bolak-balik antara potret dan lanskap, karena pada
setiap perubahan orientasi, Anda membuat MediaPlayer baru yang tidak pernah
dirilis.
Untuk informasi selengkapnya tentang mulai ulang runtime, lihat Menangani Perubahan Runtime.
Anda mungkin ingin tahu apa yang akan terjadi jika Anda ingin terus memutar "media
latar belakang" meskipun pengguna telah meninggalkan aktivitas Anda, seperti dalam perilaku
aplikasi Musik bawaan. Dalam hal ini, yang Anda butuhkan adalah
MediaPlayer yang dikontrol oleh Layanan, seperti yang dibahas di bagian berikutnya
Pelajari lebih lanjut
Jetpack Media3 adalah solusi yang direkomendasikan untuk pemutaran media di aplikasi Anda. Baca selengkapnya tentang hal ini.
Halaman ini membahas topik yang berkaitan dengan perekaman, penyimpanan, dan pemutaran kembali audio dan video: