Mengelola status dan resource MediaPlayer

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 MediaPlayer untuk 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:

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: