Önceden yükleme yöneticisi, kullanıcılara içerikleri daha hızlı sunarak ve bir öğeden diğerine geçerken daha az beklemelerini sağlayarak daha iyi bir deneyim sunmanıza yardımcı olur. Ayrıca, öğe başına önceden yükleme süresini ve sıralamasını özelleştirmenize de olanak tanır.
Sosyal medyada sık karşılaşılan bir durum, bir uygulamanın kullanıcıya medya seçeneklerinin listesini veya bant şeklinde gösterimidir. Örneğin, bir uygulamada kısa videolardan oluşan bir bant gösterilebilir. Bir video bittiğinde uygulama bir sonrakine geçer. Kullanıcılar izledikleri videoyu beğenmezlerse sayfayı kaydırarak bir sonraki veya önceki videoya geçebilirler.
Video içeriğini önceden yüklemezseniz kullanıcılar hayal kırıklığına uğrayabilir. Kullanıcı bir medyayı bitirdikten sonra bir sonraki medyanın yüklenmesini beklemek zorunda kalır.
Öte yandan, içeriği çok agresif bir şekilde önceden yüklerseniz bu durum, kullanıcının hiçbir zaman oynatmayabileceği içeriği yüklemek için güç ve ağ bant genişliğinin boşa harcanmasına neden olur.
DefaultPreloadManager
, uygulamanızın bu endişeleri dengelemesine yardımcı olur. Ön yükleme yöneticisi, her medya öğesinin ne kadar önemli olduğuna karar vermek için uygulamanızla birlikte çalışır ve uygun miktarı önceden yükler.
İş bölümü
DefaultPreloadManager
kullanıyorsanız bazı işlemler kodunuz, bazı işlemler ise ön yükleme yöneticisi tarafından yapılır.
Uygulamanız şunları yapmalıdır:
- Ön yükleme yöneticisini oluşturmak için kullandığınız
ExoPlayer
nesneyi kullanarak uygulamanınDefaultPreloadManager.Builder
nesnelerini oluşturun.DefaultPreloadManager.Builder.buildExoPlayer()
oluşturmak içinExoPlayer
adlı iş ortağını arayın. - Ön yükleme yöneticisine, izlemesi gereken her medya öğesini bildirin. Bu, banttaki tüm içerik olmayabilir. Bunun yerine, oynatılacak ilk birkaç öğeden bahsedebilirsiniz. Kullanıcı, bantta gezinirken önceden yükleme yöneticisinin havuzuna medya öğeleri ekleyip kaldırabilirsiniz.
- Carousel'daki içerik değiştiğinde veya kullanıcı oynattığı öğeyi değiştirdiğinde önceden yükleme yöneticisindeki öncelikleri geçersiz kılın. Bu, önceden yükleme yöneticisine her medya öğesinin önceliğini yeniden belirlemesini ve gerekirse içeriği yüklemesini söyler. Önceden yükleme yöneticisini, medya öğelerini ilk kez ekledikten sonra, kullanıcı bir öğeden diğerine geçtiğinde veya karuselde öğe ekleyip kaldırdığınızda geçersiz kılarsınız.
- Önceden yükleme yöneticisinin sorgularını yanıtlayarak her öğe için ne kadar içerik önceden yükleneceğini bildirin.
Kullanıcı bir öğeyi oynatmaya başladığında önceden yükleme yöneticisinden medyayı getirin. Önceden yükleme yöneticisi, uygulamanıza bu içerik için
MediaSource
verir.İşiniz bittiğinde ön yükleme yöneticisini serbest bırakarak kaynaklarını boşaltın.
Önceden yükleme yöneticisi şunları yapar:
- Uygulamanızın eklediği tüm medya öğelerini takip eder.
- Öncelikleri her geçersiz kılındığında, uygulamanız tarafından uygulanan bir
TargetPreloadStatusControl
çağırarak uygulamanıza sorgu gönderir. Bu çağrıyı, her medya öğesinden ne kadar yükleneceğini öğrenmek için yapar. - Uygulamayı sorguladıktan sonra her medya öğesinden uygun miktarda önceden yükler. Ön yükleme yöneticisi, öğenin hangi sırayla yükleneceğine karar verir. Kullanıcının oynadığı öğeye en yakın olan öğelere öncelik verir.
- Uygulama içerik istediğinde, önceden yükleme yöneticisi
MediaSource
sağlar.
Önceden yükleme yöneticisi iş akışı
Bu bölümde, preload yöneticisini kullanan bir uygulamanın tipik iş akışı açıklanmaktadır. Bu örnekte, uygulamanın kısa videolardan oluşan bir bant gösterdiği varsayılmaktadır. Seçilen video otomatik olarak oynatılır ancak kullanıcı, ruloyu her iki yönde de kaydırabilir. Bu durumda, oynatılan video durdurulur ve kaydırılan video oynatılmaya başlar.
Bu adımların tümü aşağıdaki sayfalarda ayrıntılı olarak açıklanmıştır.
- Uygulama, hedef ön yükleme durumu kontrolü oluşturur. Önceden yükleme yöneticisi, her medya öğesinin ne kadarının yükleneceğini öğrenmek için bu denetimi sorgular.
- Uygulama,
DefaultPreloadManager.Builder
oluşturur ve hedef önceden yükleme durumu kontrolünden geçer. Uygulama daha sonra ön yükleme yöneticisini oluşturmak için oluşturucuyu kullanır. - Uygulama, medya öğelerini önceden yükleme yöneticisine ekler. Uygulama, her öğe için bir dizin sağlar ve öğenin banttaki konumunu belirtir.
- Tüm medya eklendikten sonra uygulama,
invalidate()
çağrısı yaparak önceden yükleme yöneticisine her öğe için öncelikleri ayarlamasını ve ardından bunları önceden yüklemesini söyler. - Önceden yükleme yöneticisi, her medya öğesi için hedef önceden yükleme kontrolünü çağırarak öğenin ne kadarının yüklenmesi gerektiğini sorgular. Hedef ön yükleme kontrolü, belirli bir süre boyunca içerik yüklemenizi, yalnızca öğenin meta verilerini getirmenizi veya bu öğeyi şu anda getirmenizi önermeyebilir. Ön yükleme yöneticisi bu bilgileri aldıktan sonra medya içeriğini yüklemeye başlar.
- Kullanıcı içeriği oynatmaya başladığında uygulama, önceden yükleme yöneticisini çağırarak söz konusu medya öğesi için
MediaSource
isteğinde bulunur. Uygulama, ön yükleme yöneticisine hangi medya öğesinin oynatıldığını bildirmek içinsetCurrentPlayingIndex()
işlevini de çağırır. - Kullanıcı farklı bir medya öğesine geçerse uygulama, bu öğeyi önceden yükleme yöneticisinden ister ve mevcut oynatma dizinini de günceller. Ardından, önceden yükleme yöneticisine önceliklerini şu anda oynatılanlara göre güncellemesini söylemek için
invalidate()
tekrar çağrılır. - Uygulama, medyaları carousele ekler veya carouselden kaldırırsa bu öğeleri önceden yükleme yöneticisine de ekler ya da önceden yükleme yöneticisinden kaldırır ve bu işlem tamamlandığında
invalidate()
işlevini çağırır. - Ön yükleme yöneticisinin öncelikleri her geçersiz kılındığında, her öğeden ne kadar yükleneceğini öğrenmek için hedef ön yükleme kontrolünü tekrar çağırır.
- Uygulama, döngüyü kapattığında kaynaklarını boşaltmak için ön yükleme yöneticisini serbest bırakır.