Konsep pengelola pramuat

Pengelola pramuat 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 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 pendek. Saat satu video selesai, aplikasi akan beralih ke video berikutnya. Selain itu, 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 dengan 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 masalah 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 menjelajahi carousel, Anda dapat menambahkan dan menghapus item media dari kumpulan pengelola pra-muat.
  • Menanggapi kueri dari pengelola pra-muat, memberi tahu pengelola berapa banyak konten yang akan dimuat sebelumnya untuk setiap item.
  • Ambil media dari pengelola pra-muat saat pengguna mulai memutar item. Pengelola pramuat memberikan MediaSource untuk konten tersebut kepada aplikasi Anda.

  • Memberi tahu pengelola pra-muat indeks item yang sedang diputar. Informasi ini digunakan oleh pengelola pramuat untuk menentukan seberapa dekat setiap item media dengan item yang sedang diputar, dan memprioritaskan pramuat secara dinamis. Saat pengguna membuka item baru, perbarui indeks tersebut dengan pengelola pramuat.

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

Pengelola pra-muat melakukan hal berikut:

  • Objek ini melacak semua item media yang telah ditambahkan aplikasi Anda ke dalamnya.
  • Setiap kali prioritasnya diperbarui, 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 jumlah yang sesuai untuk setiap item media. Pengelola pra-muat memutuskan urutan pemuatan item. Item ini memprioritaskan 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 pendek. 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-pemuatan target. Pengelola pemuatan awal mengkueri kontrol ini untuk mengetahui jumlah item media yang harus 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. Untuk setiap item media, pengelola pra-muat memanggil kontrol pra-muat target untuk mengueri seberapa banyak item yang harus dimuat. Kontrol pemuatan awal target dapat menyatakan untuk memuat konten dengan durasi tertentu, hanya mengambil metadata item, atau tidak mengambil item tersebut saat ini. Setelah pengelola pra-pemuatan mendapatkan informasi ini, pengelola akan mulai memuat konten media.
  5. 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, sehingga prioritas item media akan diperbarui.
  6. Setiap kali prioritas pengelola pra-muat diperbarui, pengelola akan memanggil kontrol pra-muat target sekali lagi untuk mengetahui jumlah setiap item yang akan dimuat.
  7. Saat menutup carousel, aplikasi akan melepaskan pengelola pra-muat untuk mengosongkan resource-nya.