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
MediaPlayer
untuk 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
MediaPlayer
baru, 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,
MediaPlayer
akan 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: