Dokumen ini mencakup dua area yang berpotensi menimbulkan kesalahan.
Negara bagian. Dengan "Medialayer`, operasi tertentu hanya valid dalam status tertentu. Operasi yang salah dapat menyebabkan pengecualian atau perilaku yang tidak terduga.
Resource Saat Anda membuat perubahan konfigurasi, seperti rotasi layar, Anda harus melepaskan objek
MediaPlayeruntuk mengosongkan resource sistem dan menghindari kehabisan resource.
Mengelola status
MediaPlayer berbasis status. Artinya, ia memiliki status internal yang harus selalu Anda perhatikan saat menulis kode, karena operasi tertentu hanya akan valid jika pemutar berada dalam status tertentu. Jika Anda menjalankan 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 akan mengalihkan MediaPlayer dari satu status ke status lainnya. Contoh:
- Saat Anda membuat
MediaPlayerbaru,MediaPlayertersebut berada dalam status Tidak ada aktivitas. - Anda menginisialisasinya dengan memanggil
setDataSource(), yang mengubahnya ke status Diinisialisasi. - Anda mempersiapkannya menggunakan metode
prepare()atauprepareAsync(). - Setelah
MediaPlayerselesai disiapkan,MediaPlayerakan beralih ke statusPrepared, yang berarti Anda dapat memanggilstart()agar memutar media.
Pada saat itu, seperti yang diilustrasikan oleh diagram, Anda dapat mengalihkan status antara Started, Paused, dan PlaybackCompleted dengan memanggil metode seperti start(), pause(), dan seekTo().
Namun, saat memanggil stop(), perhatikan bahwa Anda tidak dapat memanggil start() lagi 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 cukup signifikan. Oleh karena itu, Anda harus selalu berhati-hati untuk memastikan bahwa 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 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;
Sebagai contoh, pertimbangkan masalah yang muncul jika Anda lupa melepaskan
MediaPlayer saat aktivitas Anda berhenti, 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 dapat dengan cepat menggunakan semua resource sistem saat pengguna memutar perangkat bolak-balik antara potret dan lanskap, karena pada setiap perubahan orientasi, Anda membuat MediaPlayer baru yang tidak pernah Anda lepaskan.
Untuk mengetahui informasi selengkapnya tentang pemulaian ulang waktu proses, lihat Menangani Perubahan Waktu Proses.
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.
Halaman ini membahas topik yang berkaitan dengan perekaman, penyimpanan, dan pemutaran kembali audio dan video: