Mengelola status dan resource MediaPlayer

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 memanggilsetDataSource(), yang mengubahnya menjadi status Diinisialisasi.
  • Anda menyiapkannya menggunakan metode prepare() atau prepareAsync().
  • Setelah selesai disiapkan, MediaPlayer akan beralih ke status Prepared, yang berarti Anda dapat memanggil start() 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: