Pengelola pramuat membantu Anda memberikan pengalaman yang lebih baik kepada pengguna dengan menayangkan konten kepada mereka lebih cepat, dengan lebih sedikit waktu tunggu saat mereka beralih dari satu item ke item lainnya. Pengelola ini juga memungkinkan Anda menyesuaikan durasi dan peringkat pramuat per item.
Situasi umum di media sosial adalah, aplikasi menampilkan daftar atau carousel pilihan media kepada pengguna. Misalnya, aplikasi dapat menampilkan carousel video pendek. Saat satu video selesai, aplikasi akan beralih ke video berikutnya. Jika pengguna tidak menyukai video yang mereka tonton, mereka dapat menggeser ke video berikutnya, atau video sebelumnya.
Jika Anda tidak memuat pramuat konten video, hal ini dapat menyebabkan pengalaman pengguna yang buruk. Pengguna selesai menonton beberapa media, lalu harus menunggu media berikutnya dimuat.
Di sisi lain, jika Anda memuat pramuat konten terlalu agresif, hal ini akan membuang daya dan bandwidth jaringan untuk memuat konten yang mungkin tidak pernah diputar oleh pengguna.
DefaultPreloadManager membantu aplikasi Anda menyeimbangkan masalah ini. Pengelola pramuat bekerja dengan aplikasi Anda untuk menentukan seberapa penting setiap item media, dan memuat jumlah yang sesuai terlebih dahulu.
Pembagian tugas
Jika Anda menggunakan DefaultPreloadManager, beberapa pekerjaan dilakukan oleh kode Anda, dan beberapa pekerjaan dilakukan oleh pengelola pramuat.
Aplikasi Anda harus melakukan hal berikut:
- Buat objek
ExoPlayeraplikasi menggunakan objekDefaultPreloadManager.Builderyang sama dengan yang Anda gunakan untuk membuat pengelola pramuat. PanggilDefaultPreloadManager.Builder.buildExoPlayer()untuk membuatExoPlayer. - Beri tahu pengelola pramuat tentang setiap item media yang harus dilacak. Ini mungkin bukan semua konten dalam carousel; sebagai gantinya, Anda dapat memberi tahu pengelola pramuat tentang beberapa item pertama yang akan diputar. Saat pengguna menavigasi carousel, Anda dapat menambahkan dan menghapus item media dari kumpulan pengelola pramuat.
- Batalkan prioritas di pengelola pramuat saat konten dalam carousel berubah, atau pengguna mengubah item yang mereka putar. Hal ini memberi tahu pengelola pramuat untuk menentukan kembali prioritas setiap item media, dan memuat konten jika diperlukan. Anda akan membatalkan pengelola pramuat setelah pertama kali menambahkan item media, dan juga saat pengguna berpindah dari satu item ke item lain, atau saat Anda menambahkan atau menghapus item ke carousel.
- Respons terhadap kueri dari pengelola pramuat, yang memberi tahu pengelola berapa banyak konten yang akan dimuat pramuat untuk setiap item.
Ambil media dari pengelola pramuat saat pengguna mulai memutar item. Pengelola pramuat memberi aplikasi Anda
MediaSourceuntuk konten tersebut.MediaSourceLepaskan pengelola pramuat saat Anda selesai menggunakannya, sehingga sumber dayanya dapat digunakan untuk hal lain.
Pengelola pramuat melakukan hal berikut:
- Pengelola pramuat melacak semua item media yang telah ditambahkan aplikasi Anda.
- Setiap kali prioritasnya dibatalkan, pengelola pramuat akan mengirim kueri ke aplikasi Anda dengan memanggil
TargetPreloadStatusControlyang diterapkan oleh aplikasi Anda. Pengelola pramuat memanggilnya untuk mengetahui berapa banyak setiap item media yang akan dimuat. - Setelah mengirim kueri ke aplikasi, pengelola pramuat akan memuat pramuat jumlah yang sesuai dari setiap item media. Pengelola pramuat menentukan urutan pemuatan item. Pengelola pramuat memprioritaskan item yang paling dekat dengan item yang diputar pengguna.
- Saat aplikasi meminta konten, pengelola pramuat akan menyediakan
MediaSourcedengan konten apa pun yang telah dimuat.
Alur kerja pengelola pramuat
Bagian ini menjelaskan alur kerja umum untuk aplikasi yang menggunakan pengelola pramuat. Dalam contoh ini, kita asumsikan aplikasi menampilkan carousel video pendek. Video yang dipilih akan diputar secara otomatis, tetapi pengguna dapat men-scroll carousel ke arah mana pun, yang akan menghentikan video yang sedang diputar dan memulai video yang di-scroll.
Semua langkah ini dibahas secara mendetail di halaman berikut.
- Aplikasi membuat kontrol status pramuat target. Pengelola pramuat mengirim kueri ke kontrol ini untuk mengetahui berapa banyak setiap item media yang akan dimuat.
- Aplikasi membuat
DefaultPreloadManager.Builder, dan meneruskan kontrol status pramuat target. Aplikasi kemudian menggunakan builder untuk membuat pengelola pramuat manager. - Aplikasi menambahkan item media ke pengelola pramuat. Aplikasi menyediakan indeks untuk setiap item, yang menentukan posisi item dalam carousel.
- Setelah semua media ditambahkan, aplikasi akan memanggil
invalidate()untuk memberi tahu pengelola pramuat agar menetapkan prioritas untuk setiap item, lalu memuat pramuat item tersebut. - Untuk setiap item media, pengelola pramuat memanggil kontrol pramuat target untuk mengirim kueri berapa banyak item yang harus dimuat. Kontrol pramuat target mungkin mengatakan untuk memuat konten dengan durasi tertentu, hanya mengambil metadata item, atau tidak mengambil item tersebut saat ini. Setelah pengelola pramuat mendapatkan informasi ini, pengelola pramuat akan mulai memuat konten media.
- Saat pengguna mulai memutar konten, aplikasi akan memanggil pengelola pramuat
untuk meminta
MediaSourceuntuk item media tersebut. Aplikasi juga memanggilsetCurrentPlayingIndex()untuk memberi tahu pengelola pramuat item media mana yang sedang diputar. - Jika pengguna berpindah ke item media lain, aplikasi akan meminta item tersebut dari pengelola pramuat, dan juga memperbarui indeks pemutaran saat ini. Kemudian, aplikasi akan memanggil
invalidate()lagi untuk memberi tahu pengelola pramuat agar memperbarui prioritasnya berdasarkan apa yang sedang diputar. - Jika aplikasi menambahkan atau menghapus item media ke carousel, aplikasi juga akan menambahkan atau menghapus item tersebut ke pengelola pramuat, dan memanggil
invalidate()setelah selesai melakukannya. - Setiap kali prioritas pengelola pramuat dibatalkan, pengelola pramuat akan memanggil kontrol pramuat target sekali lagi untuk mengetahui berapa banyak setiap item yang akan dimuat.
- Saat aplikasi menutup carousel, aplikasi akan melepaskan pengelola pramuat untuk mengosongkan sumber dayanya.