แนวคิดเกี่ยวกับเครื่องมือจัดการการโหลดล่วงหน้า

เครื่องมือจัดการการโหลดล่วงหน้าช่วยให้คุณมอบประสบการณ์การใช้งานที่ดีขึ้นแก่ผู้ใช้ด้วยการแสดงเนื้อหา ให้ผู้ใช้ได้เร็วขึ้น โดยไม่ต้องรอนานเมื่อเปลี่ยนจากรายการหนึ่งไปยังอีกรายการหนึ่ง นอกจากนี้ ยังช่วยให้คุณปรับแต่งระยะเวลาและการจัดอันดับการโหลดล่วงหน้าต่อรายการได้ด้วย

สถานการณ์ที่พบได้ทั่วไปในโซเชียลมีเดียคือ แอปจะแสดงรายการหรือภาพสไลด์ของตัวเลือกสื่อต่อผู้ใช้ เช่น แอปอาจแสดงภาพสไลด์ของวิดีโอสั้น เมื่อวิดีโอหนึ่งจบลง แอปจะเปลี่ยนไปเล่นวิดีโอถัดไป และหากผู้ใช้ไม่ชอบวิดีโอที่กำลังดูอยู่ ก็อาจปัดไปดูวิดีโอถัดไปหรือวิดีโอก่อนหน้า

หากไม่ได้โหลดเนื้อหาวิดีโอล่วงหน้า ผู้ใช้จะได้รับประสบการณ์ที่น่าหงุดหงิด ผู้ใช้ดูสื่อบางอย่างจนจบแล้วต้องรอให้สื่อถัดไปโหลด

ในทางกลับกัน หากคุณโหลดเนื้อหาล่วงหน้ามากเกินไป จะทำให้สิ้นเปลืองพลังงานและแบนด์วิดท์เครือข่ายในการโหลดเนื้อหาที่ผู้ใช้อาจไม่เคย เล่นเลย

DefaultPreloadManager ช่วยให้แอปของคุณสร้างสมดุลระหว่างข้อกังวลเหล่านี้ได้ ตัวจัดการการโหลดล่วงหน้า จะทำงานร่วมกับแอปเพื่อพิจารณาความสำคัญของสื่อแต่ละรายการ และ โหลดสื่อในปริมาณที่เหมาะสมล่วงหน้า

การแบ่งงาน

หากคุณใช้ DefaultPreloadManager โค้ดของคุณจะทำงานบางอย่าง และตัวจัดการการโหลดล่วงหน้าจะทำงานบางอย่าง

แอปของคุณต้องมีคุณสมบัติดังนี้

ตัวจัดการการโหลดล่วงหน้าจะทำสิ่งต่อไปนี้

  • โดยจะติดตามรายการสื่อทั้งหมดที่แอปของคุณเพิ่มลงในคลัง
  • ทุกครั้งที่ลำดับความสำคัญไม่ถูกต้อง ระบบจะค้นหาแอปของคุณโดยเรียกใช้ TargetPreloadStatusControl ที่แอปของคุณติดตั้งใช้งานไว้ ระบบจะเรียกใช้ฟังก์ชันนี้เพื่อดูว่าควรโหลดรายการสื่อแต่ละรายการมากน้อยเพียงใด
  • หลังจากค้นหาแอปแล้ว ระบบจะโหลดรายการสื่อแต่ละรายการ ล่วงหน้าในจำนวนที่เหมาะสม เครื่องมือจัดการการโหลดล่วงหน้าจะตัดสินใจลำดับการโหลดรายการ โดยจะ จัดลำดับความสำคัญของรายการที่ใกล้เคียงกับรายการที่ผู้ใช้กำลังเล่นมากที่สุด
  • เมื่อแอปขอเนื้อหา ตัวจัดการการโหลดล่วงหน้าจะให้MediaSource พร้อมเนื้อหาที่โหลดแล้ว

เวิร์กโฟลว์ของเครื่องมือจัดการการโหลดล่วงหน้า

ส่วนนี้อธิบายเวิร์กโฟลว์ทั่วไปสำหรับแอปที่ใช้ตัวจัดการการโหลดล่วงหน้า ในตัวอย่างนี้ เราจะถือว่าแอปแสดงภาพสไลด์ของวิดีโอสั้น วิดีโอที่เลือกจะเล่นโดยอัตโนมัติ แต่ผู้ใช้สามารถเลื่อนภาพสไลด์ไปใน ทิศทางใดก็ได้ ซึ่งจะหยุดวิดีโอที่กำลังเล่นและเริ่มวิดีโอที่ ผู้ใช้เลื่อนไป

เราจะอธิบายขั้นตอนทั้งหมดนี้อย่างละเอียดในหน้าต่อไปนี้

  1. แอปสร้าง การควบคุมสถานะการโหลดล่วงหน้าเป้าหมาย ตัวจัดการการโหลดล่วงหน้า จะค้นหาการควบคุมนี้เพื่อดูว่าควรโหลดรายการสื่อแต่ละรายการมากน้อยเพียงใด
  2. แอปจะสร้าง DefaultPreloadManager.Builder และส่งการควบคุมสถานะการโหลดล่วงหน้าของเป้าหมาย จากนั้นแอปจะใช้เครื่องมือสร้างเพื่อสร้างตัวจัดการ การโหลดล่วงหน้า
  3. แอปจะเพิ่มรายการสื่อลงในเครื่องมือจัดการการโหลดล่วงหน้า แอปจะระบุดัชนีสำหรับแต่ละรายการ โดยระบุตำแหน่งของรายการในภาพสไลด์
  4. หลังจากเพิ่มสื่อทั้งหมดแล้ว แอปจะเรียกใช้ invalidate() เพื่อแจ้งให้ ตัวจัดการการโหลดล่วงหน้าตั้งค่าลำดับความสำคัญสำหรับแต่ละรายการ แล้วโหลดล่วงหน้า
  5. สำหรับสื่อแต่ละรายการ ตัวจัดการการโหลดล่วงหน้าจะเรียกใช้การควบคุมการโหลดล่วงหน้าเป้าหมายเพื่อ สอบถามว่าควรโหลดรายการมากน้อยเพียงใด การควบคุมการโหลดล่วงหน้าเป้าหมาย อาจบอกให้โหลดเนื้อหาเป็นระยะเวลาหนึ่ง เพียงแค่ดึงข้อมูลเมตาของรายการ หรือไม่ต้องดึงข้อมูลใดๆ ของรายการนั้นในตอนนี้ หลังจากที่ตัวจัดการการโหลดล่วงหน้าได้รับข้อมูลนี้แล้ว ก็จะเริ่มโหลดเนื้อหาสื่อ
  6. เมื่อผู้ใช้เริ่มเล่นเนื้อหา แอปจะเรียกใช้เครื่องมือจัดการการโหลดล่วงหน้า เพื่อขอ MediaSource สำหรับรายการสื่อนั้น แอปยังเรียกใช้ setCurrentPlayingIndex() เพื่อบอกตัวจัดการการโหลดล่วงหน้าว่ากำลังเล่นรายการสื่อใด
  7. หากผู้ใช้เปลี่ยนไปใช้รายการสื่ออื่น แอปจะขอรายการนั้นจาก เครื่องมือจัดการการโหลดล่วงหน้า และอัปเดตดัชนีการเล่นปัจจุบันด้วย จากนั้นจะเรียกใช้ invalidate() อีกครั้งเพื่อบอกให้ตัวจัดการการโหลดล่วงหน้าอัปเดต ลำดับความสำคัญตามสิ่งที่กำลังเล่นอยู่
  8. หากแอปเพิ่มหรือนำรายการสื่อไปยังภาพสไลด์ แอปจะเพิ่มหรือนำรายการเหล่านั้นไปยังเครื่องมือจัดการการโหลดล่วงหน้าด้วย และจะเรียกใช้ invalidate() เมื่อดำเนินการเสร็จแล้ว
  9. เมื่อใดก็ตามที่ลำดับความสำคัญของเครื่องมือจัดการการโหลดล่วงหน้าไม่ถูกต้อง เครื่องมือจะเรียก การควบคุมการโหลดล่วงหน้าเป้าหมายอีกครั้งเพื่อดูว่าควรโหลดแต่ละรายการมากน้อยเพียงใด
  10. เมื่อแอปปิดภาพสไลด์ แอปจะปล่อยตัวจัดการการโหลดล่วงหน้าเพื่อ เพิ่มพื้นที่ว่างในทรัพยากร