เอกสารนี้ครอบคลุม 2 ด้านที่อาจเกิดข้อผิดพลาด
รัฐ เมื่อใช้ "Medialayer" การดำเนินการบางอย่างจะใช้ได้เฉพาะในสถานะบางอย่างเท่านั้น การดำเนินการที่ไม่ถูกต้องอาจทำให้เกิดข้อยกเว้นหรือลักษณะการทำงานที่ไม่คาดคิด
ทรัพยากร เมื่อทําการเปลี่ยนแปลงการกําหนดค่า เช่น การหมุนหน้าจอ คุณต้องปล่อยออบเจ็กต์
MediaPlayerเพื่อเพิ่มพื้นที่ว่างในทรัพยากรของระบบและหลีกเลี่ยงการหมดทรัพยากร
จัดการสถานะ
MediaPlayer อิงตามสถานะ กล่าวคือ มีสถานะภายในที่คุณต้องคำนึงถึงเสมอเมื่อเขียนโค้ด เนื่องจากการดำเนินการบางอย่างจะถูกต้องก็ต่อเมื่อผู้เล่นอยู่ในสถานะหนึ่งๆ หากคุณดำเนินการขณะอยู่ในสถานะที่ไม่ถูกต้อง ระบบอาจแสดงข้อยกเว้นหรือทําให้ระบบทำงานผิดพลาด
แผนภาพสถานะในเอกสารประกอบของคลาส MediaPlayer จะชี้แจงว่าเมธอดใดที่ย้าย MediaPlayer จากสถานะหนึ่งไปยังอีกสถานะหนึ่ง เช่น
- เมื่อคุณสร้าง
MediaPlayerใหม่MediaPlayerดังกล่าวจะอยู่ในสถานะไม่มีการใช้งาน - คุณสามารถเริ่มต้นได้โดยการเรียกใช้
setDataSource()ซึ่งจะเปลี่ยนสถานะเป็นเริ่มต้นแล้ว - คุณเตรียมโดยใช้เมธอด
prepare()หรือprepareAsync() - เมื่อ
MediaPlayerเตรียมพร้อมแล้ว ก็จะเข้าสู่สถานะPreparedซึ่งหมายความว่าคุณจะเรียกใช้start()เพื่อให้เล่นสื่อได้
เมื่อถึงจุดนั้น คุณจะสลับระหว่างสถานะ Started,
Paused และ PlaybackCompleted ได้โดยเรียกใช้เมธอดต่างๆ เช่น start(), pause() และ seekTo() เป็นต้น
อย่างไรก็ตาม เมื่อคุณเรียกใช้ stop() คุณจะเรียกใช้ start()
ไม่ได้อีกจนกว่าจะเตรียม MediaPlayer อีกครั้ง
อย่าลืมคำนึงถึงแผนภาพสถานะเสมอเมื่อเขียนโค้ดที่โต้ตอบกับออบเจ็กต์ MediaPlayer เนื่องจากการเรียกเมธอดจากสถานะที่ผิดเป็นสาเหตุที่พบบ่อยของข้อบกพร่อง
ปล่อย MediaPlayer
MediaPlayer อาจใช้ทรัพยากรระบบที่มีค่า ดังนั้น คุณจึงควรใช้ความระมัดระวังเพิ่มเติมเสมอเพื่อให้แน่ใจว่าคุณไม่ได้เก็บอินสแตนซ์ MediaPlayer ไว้นานกว่าที่จำเป็น เมื่อดำเนินการเสร็จแล้ว คุณควรเรียกใช้ release() เสมอเพื่อให้แน่ใจว่าระบบได้ปล่อยทรัพยากรทั้งหมดที่กําหนดไว้ให้กับ release() ดังกล่าวแล้ว
ตัวอย่างเช่น หากคุณใช้ MediaPlayer และกิจกรรมได้รับการเรียกใช้ onStop() คุณต้องปล่อย MediaPlayer เนื่องจากไม่มีเหตุผลที่จะเก็บไว้ในขณะที่กิจกรรมไม่ได้โต้ตอบกับผู้ใช้ (เว้นแต่คุณจะเล่นสื่อในเบื้องหลัง ซึ่งจะกล่าวถึงในส่วนถัดไป)
เมื่อกิจกรรมกลับมาดำเนินต่อหรือเริ่มใหม่ คุณจะต้องสร้าง MediaPlayer ใหม่และเตรียมอีกครั้งก่อนเล่นต่อ
วิธีปล่อยและทำให้ MediaPlayer ของคุณเป็นโมฆะมีดังนี้
Kotlin
mediaPlayer?.release()
mediaPlayer = null
Java
mediaPlayer.release();
mediaPlayer = null;
ตัวอย่างเช่น ลองพิจารณาปัญหาที่อาจเกิดขึ้นหากคุณลืมปล่อยMediaPlayer เมื่อกิจกรรมหยุดลง แต่สร้างใหม่เมื่อกิจกรรมเริ่มขึ้นอีกครั้ง เมื่อผู้ใช้เปลี่ยนการวางแนวหน้าจอ (หรือเปลี่ยนการกำหนดค่าอุปกรณ์ด้วยวิธีอื่น) ระบบจะรีสตาร์ทกิจกรรมโดยค่าเริ่มต้น คุณอาจใช้ทรัพยากรของระบบทั้งหมดอย่างรวดเร็วเมื่อผู้ใช้หมุนอุปกรณ์ไปมาระหว่างแนวตั้งและแนวนอน เนื่องจากเมื่อเปลี่ยนการวางแนวแต่ละครั้ง คุณสร้าง MediaPlayer ใหม่ที่ไม่ได้เผยแพร่
ดูข้อมูลเพิ่มเติมเกี่ยวกับการเริ่มรันไทม์ใหม่ได้ที่การจัดการการเปลี่ยนแปลงรันไทม์
คุณอาจสงสัยว่าจะเกิดอะไรขึ้นหากต้องการเล่น "สื่อในเบื้องหลัง" ต่อแม้ว่าผู้ใช้จะออกจากกิจกรรมแล้ว เช่นเดียวกับลักษณะการทํางานของแอปพลิเคชันเพลงในตัว ในกรณีนี้ สิ่งที่คุณต้องการคือ MediaPlayer ที่ควบคุมโดยบริการตามที่อธิบายไว้ในส่วนถัดไป
ดูข้อมูลเพิ่มเติม
Jetpack Media3 เป็นโซลูชันที่แนะนำสำหรับการเล่นสื่อในแอป อ่านข้อมูลเพิ่มเติมเกี่ยวกับโซลูชันนี้
หน้าเหล่านี้ครอบคลุมหัวข้อเกี่ยวกับการบันทึก การจัดเก็บ และการเล่นเสียงและวิดีโอ