Senaryo: - Resim Yükleme ve önbelleğe alma kütüphanesiGlide: Görüntünün önceden önbelleğe alınmış olup olmadığını ve önbelleğe alınmış sürümü nasıl kullanır?
Ben ilk defa kullanıcı Glide kullanarak uygulamasını açar önbelleğe istediğiniz büyük bir GIF resmi var. Bundan sonra kullanıcı uygulamayı açtığında, varsa önbelleğe alınmış sürümü göstermek istiyorum. Bu GIF URL’si belirli bir aradan sonra sona erecektir. Süresi dolduğunda, gelecekteki kullanım için yeni GIF URL'sini ve görüntü/önbelleği alırım.
Ben Glide en github sayfasından Caching and Cache Invalidation geçti: Denedim ne
. Ayrıca, Google Grup iş parçacığı Ensuring That Images Loaded Only Come From Disk Cache, görüntü formu önbelleğini nasıl alacağınızı gösteren de gittim. Ayrıca How to invalidate Glide cache for some specific images sorudan geçtim.
Yukarıdaki bağlantılardan görüntünün önbellekten nasıl yükleneceğini gösteren aşağıdaki kod parçacığını görüyorum. Ancak bu sadece görüntüyü önbellekten almaya çalışır. önbellekte onun mevcut değil ise, ağdan elde etmeye çalışmak ve başarısız değildir:
Glide.with(TheActivity.this)
.using(new StreamModelLoader<String>() {
@Override
public DataFetcher<InputStream> getResourceFetcher(final String model, int i, int i1) {
return new DataFetcher<InputStream>() {
@Override
public InputStream loadData(Priority priority) throws Exception {
throw new IOException();
}
@Override
public void cleanup() {
}
@Override
public String getId() {
return model;
}
@Override
public void cancel() {
}
};
}
})
.load("http://sampleurl.com/sample.gif")
.diskCacheStrategy(DiskCacheStrategy.SOURCE)
.into(theImageView);
Sorular:
aşağıdaki ulaşmak için daha temiz bir yolu var mı: göster Önceden GIF görüntüsünü varsa, GIF'i indirin, daha sonra kullanmak için önbelleğe alın ve
ImageView
'da gösterin.yukarıdaki önbelleğe alma makalede aşağıdaki bahseder: Uygulamada
, bir önbellek dosyası geçersiz etmenin en iyi yolu tanımlayıcılarınızı değiştirmektir zaman içerik değişiklikleri (url, uri, dosya yolu vb)
Sunucu, bir öncekinin süresi dolduğunda uygulamaya farklı bir URL gönderir. Bu durumda, eski görüntünün sonunda Çöp Toplanacağına inanıyorum? Resmi önbellekten kaldırmaya zorlamanın bir yolu var mı?
Benzer bir notta, belirli bir anahtarla (büyük dosyanın tekrar indirilmesini engellemek için) Çöp Toplama Görüntüsünün engellenmesinin bir yolu var mı ve sonra URL değiştiğinde eski resmi önbellekten silme talimatı var mı?
Yanıtlamak için zaman ayırdığınız için çok teşekkürler. Aslında bu pek çok şeyi açıklığa kavuşturuyor. İlk noktanız yapmak istediğim bir şey. Varsayılan davranış olup olmadığından emin değildim. Ancak, standart kodun önbelleğe alınan görüntüyü kullanmadığını düşünmeme neden olan şey, bu kod ilk kez çalıştırıldığında, Glide'nin görüntüyü önbelleğe aldığını varsaydım. Şimdi uygulamayı kapatıp interneti kapatıyorum. Şimdi uygulamayı açtığımda, cihaz çevrimdışı olduğunda görüntü gösterilmiyor. Ancak, soruda belirtildiği gibi StreamModelLoader kullandığımda, onu görüntülüyor mu? Yardımlarınız için minnettarım. –
Sanırım haklıydın. Şimdi eminim neden daha önce olmuyordu. Tekrar teşekkürler –
GIF çevrimdışı yüklemek için bu özel ModelLoader ihtiyacınız olan davranışını görürseniz, bu işe yaradı sevindim GitHub (https://github.com/bumptech/glide/issues/ yeni) bu yüzden ona bakabiliriz, kesinlikle gerekli olmamalı. –