Konsep pengelola pramuat

Pengelola pra-muat membantu Anda memberikan pengalaman yang lebih baik kepada pengguna dengan menyajikan konten kepada mereka lebih cepat, dengan lebih sedikit waktu tunggu saat mereka beralih dari satu item ke item lainnya. Selain itu, Anda juga dapat 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 singkat. Saat satu video selesai, aplikasi akan beralih ke video berikutnya. Jika pengguna tidak menyukai video yang sedang ditonton, mereka dapat menggeser ke video berikutnya atau sebelumnya.

Jika Anda tidak memuat konten video terlebih dahulu, hal ini dapat menyebabkan pengalaman pengguna yang menjengkelkan. Pengguna selesai menggunakan beberapa media, lalu harus menunggu media berikutnya dimuat.

Di sisi lain, jika Anda memuat konten terlebih dahulu secara terlalu agresif, hal itu akan membuang daya dan bandwidth jaringan dengan memuat konten yang mungkin tidak pernah diputar oleh pengguna.

DefaultPreloadManager membantu aplikasi Anda menyeimbangkan kekhawatiran ini. Pengelola pemuatan awal bekerja dengan aplikasi Anda untuk memutuskan seberapa penting setiap item media, dan memuat jumlah yang sesuai sebelumnya.

Pembagian kerja

Jika Anda menggunakan DefaultPreloadManager, sebagian pekerjaan dilakukan oleh kode Anda, dan sebagian lagi oleh pengelola pra-muat.

Aplikasi Anda harus melakukan hal berikut:

  • Buat objek ExoPlayer aplikasi menggunakan objek DefaultPreloadManager.Builder yang sama dengan yang Anda gunakan untuk membuat pengelola pramuat. Panggil DefaultPreloadManager.Builder.buildExoPlayer() untuk membuat ExoPlayer.
  • Memberi tahu pengelola pra-muat tentang setiap item media yang harus dilacaknya. Ini mungkin bukan semua konten dalam carousel; sebagai gantinya, Anda hanya dapat memberi tahu beberapa item pertama yang akan diputar. Saat pengguna bernavigasi melalui carousel, Anda dapat menambahkan dan menghapus item media dari kumpulan pengelola pramuat.
  • Batalkan validasi prioritas di pengelola pramuat saat konten dalam carousel berubah, atau pengguna mengubah item yang sedang diputar. Tindakan ini memberi tahu pengelola pramuat untuk menentukan ulang prioritas setiap item media, dan memuat konten jika diperlukan. Anda akan membatalkan validasi 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.
  • Menanggapi kueri dari pengelola pra-muat, memberi tahu pengelola jumlah konten yang akan dimuat sebelumnya untuk setiap item.
  • Ambil media dari pengelola pramuat saat pengguna mulai memutar item. Pengelola pramuat memberikan MediaSource untuk konten tersebut kepada aplikasi Anda.

  • Lepaskan pengelola pra-muat setelah Anda selesai menggunakannya, sehingga melepaskan sumber dayanya.

Pengelola pra-muat melakukan hal berikut:

  • Objek ini melacak semua item media yang telah ditambahkan aplikasi Anda ke dalamnya.
  • Setiap kali prioritasnya dibatalkan, ia akan mengkueri aplikasi Anda dengan memanggil TargetPreloadStatusControl yang diterapkan oleh aplikasi Anda. Ia memanggil ini untuk mengetahui berapa banyak setiap item media yang akan dimuat.
  • Setelah mengkueri aplikasi, aplikasi akan memuat sebelumnya setiap item media dalam jumlah yang sesuai. Pengelola pra-muat memutuskan urutan pemuatan item. Fitur ini membuat prioritas pada item yang paling dekat dengan item yang dimainkan pengguna.
  • Saat aplikasi meminta konten, pengelola pra-muat akan menyediakan MediaSource dengan konten apa pun yang telah dimuat.

Alur kerja pengelola pra-muat

Bagian ini menjelaskan alur kerja umum untuk aplikasi yang menggunakan pengelola pra-muat. Dalam contoh ini, kami mengasumsikan aplikasi menampilkan carousel video singkat. Video yang dipilih 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.

  1. Aplikasi membuat kontrol status pra-muat target. Pengelola pemuatan awal mengkueri kontrol ini untuk mengetahui jumlah item media yang akan dimuat.
  2. Aplikasi membuat DefaultPreloadManager.Builder, dan meneruskan kontrol status pra-pemuatan target. Kemudian, aplikasi menggunakan builder untuk membuat pengelola pemuatan awal.
  3. Aplikasi menambahkan item media ke pengelola pramuat. Aplikasi menyediakan indeks untuk setiap item, yang menentukan posisi item dalam carousel.
  4. Setelah semua media ditambahkan, aplikasi memanggil invalidate() untuk memberi tahu pengelola pra-pemuatan agar menetapkan prioritas untuk setiap item, lalu memuatnya terlebih dahulu.
  5. Untuk setiap item media, pengelola pramuat memanggil kontrol pramuat target untuk mengueri seberapa banyak item yang harus dimuat. Kontrol pemuatan awal target dapat meminta untuk memuat konten dengan durasi tertentu, hanya mengambil metadata item, atau tidak mengambil item tersebut saat ini. Setelah pengelola pra-pemuatan mendapatkan informasi ini, ia mulai memuat konten media.
  6. Saat pengguna mulai memutar konten, aplikasi memanggil pengelola pramuat untuk meminta MediaSource untuk item media tersebut. Aplikasi juga memanggil setCurrentPlayingIndex() untuk memberi tahu pengelola pramuat item media mana yang sedang diputar.
  7. Jika pengguna berpindah ke item media lain, aplikasi akan meminta item tersebut dari pengelola pramuat, dan juga memperbarui indeks pemutaran saat ini. Kemudian, invalidate() dipanggil lagi untuk memberi tahu pengelola pramuat agar memperbarui prioritasnya berdasarkan konten yang sedang diputar.
  8. Jika aplikasi menambahkan atau menghapus item media ke carousel, aplikasi juga menambahkan atau menghapus item tersebut ke pengelola pramuat, dan memanggil invalidate() saat selesai melakukannya.
  9. Setiap kali prioritas pengelola pramuat dibatalkan, pengelola akan memanggil kontrol pramuat target sekali lagi untuk mengetahui jumlah setiap item yang akan dimuat.
  10. Saat menutup carousel, aplikasi akan melepaskan pengelola pramuat untuk mengosongkan resource-nya.