Ö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 ön yükleme süresini ve sıralamasını da özelleştirebilirsiniz.
Sosyal medyada sık karşılaşılan bir durum, bir uygulamanın kullanıcıya medya seçeneklerinin listesini veya döngüsünü göstermesidir. Ö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 olumsuz bir deneyim yaşayabilir. 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, kullanıcının hiçbir zaman oynatmayabileceği içeriği yüklemek için güç ve ağ bant genişliğini boşa harcar.
DefaultPreloadManager
, uygulamanızın bu endişeleri dengelemesine yardımcı olur. Önceden 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 ekleyebilir ve bu öğeleri kaldırabilirsiniz.
- Carousel'deki 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 ilk medya öğelerini ekledikten sonra, kullanıcı bir öğeden diğerine geçtiğinde veya karuselde öğe eklediğinizde ya da 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.
Ön 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. - Uygulamaya sorgu gönderdikten 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ğini varsayıyoruz. 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 bir
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 önceden yükleme kontrolü, belirli bir süre boyunca içerik yüklenmesini, yalnızca öğenin meta verilerinin getirilmesini veya bu öğenin şu anda getirilmemesini isteyebilir. Ö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çin desetCurrentPlayingIndex()
çağrısı yapar. - 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.