परिदृश्य: - छवि लोड हो रहा है और कैशिंग पुस्तकालयग्लाइड: छवि को पहले से कैश किया गया है और कैश किए गए संस्करण का उपयोग कैसे करें?
मैं एक बड़ी GIF चित्र जो मैं कैश करने के लिए पहली बार उपयोगकर्ता एप्लिकेशन Glide का उपयोग कर खोलता चाहते हैं। उसके बाद जब भी ऐप ऐप खोलता है, तो मैं मौजूद कैश संस्करण दिखाना चाहता हूं। यह जीआईएफ यूआरएल किसी दिए गए अंतराल के बाद समाप्त हो जाएगा। जब यह समाप्त हो जाता है, तो मैं भविष्य में उपयोग के लिए नया जीआईएफ यूआरएल और प्रदर्शन/कैश लाता हूं।
मैं क्या करने की कोशिश की:
मैं ग्लाइड के GitHub पृष्ठ पर Caching and Cache Invalidation माध्यम से चला गया। मैं Google समूह थ्रेड Ensuring That Images Loaded Only Come From Disk Cache हालांकि चला गया, जो दिखाता है कि छवि प्रपत्र कैश कैसे प्राप्त करें। मैं How to invalidate Glide cache for some specific images प्रश्न के माध्यम से भी चला गया।
उपरोक्त लिंक से मैं निम्नलिखित कोड स्निपलेट देखता हूं जो दिखाता है कि कैश से छवि को कैसे लोड किया जाए। हालांकि यह केवल कैश से छवि प्राप्त करने का प्रयास करता है। कैश में अपनी उपस्थित नहीं है, यह नेटवर्क से प्राप्त करने की कोशिश करता है और विफल रहता है:
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);
सवाल:
वहाँ निम्नलिखित प्राप्त करने के लिए एक क्लीनर तरीका है: दिखाएँ कैश से जीआईएफ छवि अगर वर्तमान में जीआईएफ डाउनलोड करें, इसे बाद में उपयोग के लिए कैश करें और इसे
ImageView
में दिखाएं।कैशिंग उपरोक्त लेख का उल्लेख है निम्नलिखित:
अभ्यास में, संचय फ़ाइल रद्द करने के लिए सबसे अच्छा तरीका है अपने पहचानकर्ता बदलने के लिए है जब सामग्री में परिवर्तन (यूआरएल, uri, फ़ाइल पथ आदि)
पिछला एक समाप्त होने पर सर्वर ऐप पर एक अलग यूआरएल भेजता है। इस मामले में, मेरा मानना है कि पुरानी छवि आखिरकार कचरा एकत्रित होगी? क्या कैश से छवि को हटाने के लिए मजबूर करने का कोई तरीका है?
एक ऐसी ही टिप्पणी पर, वहाँ विशिष्ट कुंजी के साथ एक छवि का कूड़ा संग्रह को रोकने के लिए एक तरह से (बड़ी फाइल फिर से डाउनलोड करने से रोकने के लिए) और फिर बाद में जब URL परिवर्तन कैश से पुरानी छवि हटाने का निर्देश है?
उत्तर देने के लिए समय लेने के लिए बहुत बहुत धन्यवाद। असल में यह बहुत सारी चीजें साफ़ करता है। आपके पहले बिंदु के लिए यह कुछ है जो मैं करना चाहता हूं। मुझे यकीन नहीं था कि यह डिफ़ॉल्ट व्यवहार था या नहीं। हालांकि मुझे क्या लगता है कि मानक कोड कैश्ड छवि का उपयोग नहीं कर रहा था यह था कि जब यह कोड पहली बार निष्पादित होता है, तो मुझे लगता है कि ग्लाइड छवि को कैश करता है। अब मैं ऐप बंद कर देता हूं और इंटरनेट बंद कर देता हूं। अब जब मैं ऐप खोलता हूं, तो डिवाइस ऑफ़लाइन होने पर छवि नहीं दिखाती है। हालांकि जब मैं प्रश्न में उल्लिखित 'StreamModelLoader' का उपयोग करता हूं, तो यह प्रदर्शित करता है? मैं आपकी मदद की सराहना करता हूं। –
मुझे लगता है कि आप सही थे। अब सुनिश्चित करें कि यह पहले क्यों नहीं हो रहा था। धन्यवाद फिर से –
खुशी हुई कि यह काम करता है, यदि आपको ऐसा व्यवहार दिखाई देता है जहां आपको उस कस्टम मॉडल लोडर को जीआईएफ ऑफ़लाइन लोड करने के लिए प्राप्त करने की आवश्यकता है, तो कृपया गिटहब पर एक समस्या खोलें (https://github.com/bumptech/glide/issues/ नया) ताकि हम इसमें देख सकें, यह निश्चित रूप से आवश्यक नहीं होना चाहिए। –