Glide Android में इमेज लोड करने के लिए एक लाइब्रेरी है, जो Google द्वारा Bumptech प्रोजेक्ट के माध्यम से समर्थित है। यह लाइब्रेरी स्वचालित मेमोरी प्रबंधन के साथ इमेज, GIF एनिमेशन और वीडियो फ्रेम की कुशल लोडिंग प्रदान करती है। Glide GitHub रिपॉजिटरी के अनुसार, इस प्रोजेक्ट का उपयोग 200,000 से अधिक एप्लिकेशन करते हैं। Google Android में ग्राफिक्स लोड करने के लिए Glide को पसंदीदा लाइब्रेरी के रूप में अनुशंसित करता है।
मुख्य बिंदु
Glide Android एप्लिकेशन में इमेज, एनिमेटेड GIF और वीडियो फ्रेम की तेज़ और कुशल लोडिंग के लिए एक लाइब्रेरी है। यह प्रोजेक्ट Google की देखरेख में Bumptech द्वारा विकसित किया गया है और Google के आधिकारिक एप्लिकेशन में व्यापक रूप से उपयोग किया जाता है।
Glide की आंतरिक संरचना घटक-आधारित दृष्टिकोण पर बनी है: Engine अनुरोध निष्पादन का प्रबंधन करता है, DecodeJob डिकोडिंग के लिए जिम्मेदार है, और ResourceDecoder कच्चे डेटा को Bitmap या Drawable में बदलता है। प्रत्येक चरण को मॉड्यूल और रजिस्ट्री के माध्यम से अनुकूलित किया जा सकता है, जो Glide को गैर-मानक इमेज प्रारूपों के लिए एक अत्यंत लचीली लाइब्रेरी बनाता है।
कई प्रतिस्पर्धियों के विपरीत, Glide को शुरू से ही Android की विशेषताओं को ध्यान में रखकर डिज़ाइन किया गया था: Activity और Fragment जीवनचक्र, स्क्रीन रोटेशन, कॉन्फ़िगरेशन परिवर्तन। लाइब्रेरी घटक की स्थिति के आधार पर स्वचालित रूप से लोडिंग को रोकती और फिर से शुरू करती है।
Android Developers के अनुसार, Google के आधिकारिक दस्तावेज़ीकरण में इमेज लोडिंग के लिए Glide अनुशंसित लाइब्रेरी है। इसका उपयोग Google Play, Google Maps और कंपनी के अन्य उत्पादों में किया जाता है, जो इसकी विश्वसनीयता और प्रदर्शन की पुष्टि करता है।
Glide और विकल्पों के बीच मुख्य अंतर ImageView आकार में फिट होने के लिए स्वचालित इमेज स्केलिंग है। जहाँ Picasso पूर्ण रिज़ॉल्यूशन में इमेज लोड करता है और फिर उसे स्केल करता है, वहीं Glide फ़ाइल को सीधे आवश्यक आकार में डिकोड करता है। यह पीक मेमोरी खपत को कम करता है और विभिन्न सेल आकारों वाली सूचियों में प्रदर्शन को गति देता है।
Glide इमेज के साथ काम करने के लिए व्यापक कार्य प्रदान करता है, जो सरल और जटिल दोनों प्रकार के कंटेंट लोडिंग परिदृश्यों को कवर करता है।
GIF और एनिमेटेड WebP Glide द्वारा स्थिर इमेज की तरह ही आसानी से लोड और प्रदर्शित किए जाते हैं। लाइब्रेरी स्वचालित रूप से MIME प्रकार द्वारा प्रारूप का पता लगाती है और एनिमेशन को डिकोड करती है, फ्रेम को बैकग्राउंड थ्रेड में प्रदर्शित करती है। प्लेबैक नियंत्रण के लिए asGif और asBitmap विधियाँ उपलब्ध हैं।
Glide स्वचालित रूप से Activity, Fragment और View के जीवनचक्र से जुड़ जाता है। जब Activity रुकती है, लोडिंग निलंबित हो जाती है; जब नष्ट होती है, तो रद्द कर दी जाती है। यह मेमोरी लीक और पहले से बंद स्क्रीन के लिए इमेज लोडिंग को रोकता है। एकीकरण LifecycleOwner समर्थन के माध्यम से काम करता है।
Glide URL या स्थानीय पथ द्वारा वीडियो से फ्रेम निकाल सकता है। वीडियो URI के लिए load() के साथ asBitmap() विधि का उपयोग किया जाता है। Glide स्वचालित रूप से एक की फ्रेम या निर्दिष्ट टाइमस्टैम्प पर फ्रेम का चयन करता है। यह वीडियो थंबनेल प्रदर्शित करने के लिए उपयोगी है।
GlideApp एक जनरेटेड क्लास है जो AppGlideModule कॉन्फ़िगरेशन के आधार पर एक विस्तारित API प्रदान करता है। यह मानक Glide.with में अनुपलब्ध विधियों का उपयोग करने की अनुमति देता है: कस्टम डिफ़ॉल्ट विकल्पों के साथ लोडिंग, लाइब्रेरी के साथ एकीकरण और प्रीसेट ट्रांसफ़ॉर्मेशन। जनरेशन के लिए AppGlideModule को एक्सटेंड करने वाली क्लास में @GlideModule एनोटेशन आवश्यक है।
Glide इंजन, डिकोडर, ट्रांसफ़ॉर्मेशन और कैश के साथ बहु-स्तरीय आर्किटेक्चर का उपयोग करता है। प्रत्येक अनुरोध हैंडलर की एक श्रृंखला से गुज़रता है जो एक विशिष्ट ImageView के लिए लोडिंग को अनुकूलित करते हैं।
जब into(view) कॉल किया जाता है, Glide कैश की जाँच करता है: सक्रिय संसाधन, मेमोरी कैश, डिस्क कैश, और उसके बाद ही नेटवर्क। इमेज स्क्रीन डेंसिटी और scaleType को ध्यान में रखते हुए स्वचालित रूप से लक्ष्य ImageView आकार में स्केल की जाती है। यह मेमोरी उपयोग को कम करता है — Glide का एक प्रमुख लाभ।
Glide.with(context)
.load("https://example.com/image.jpg")
.placeholder(R.drawable.loading)
.error(R.drawable.error)
.override(400, 300)
.centerCrop()
.into(imageView)
स्थापना Glide की Gradle के माध्यम से की जाती है। API जनरेशन के लिए लाइब्रेरी को AppGlideModule के माध्यम से कॉन्फ़िगरेशन की आवश्यकता होती है। न्यूनतम Android API संस्करण 21 है।
build.gradle में, GlideApp API जनरेशन के लिए kapt एनोटेशन प्रोसेसर के साथ Glide जोड़ें। Kotlin के लिए, annotationProcessor के बजाय kapt का उपयोग करें। Glide संस्करण 4.16+ Android Gradle Plugin 8.x के साथ स्थिर रूप से काम करता है।
dependencies {
implementation "com.github.bumptech.glide:glide:4.16.0"
annotationProcessor "com.github.bumptech.glide:compiler:4.16.0"
}
// Kotlin के लिए kapt का उपयोग करें
// kapt "com.github.bumptech.glide:compiler:4.16.0"
AppGlideModule Glide को कॉन्फ़िगर करने के लिए एक अनिवार्य घटक है। यह कैश आकार, कस्टम HttpStack सेट करने और कस्टम डिकोडर पंजीकृत करने की अनुमति देता है। एप्लिकेशन स्टार्टअप पर मॉड्यूल Glide द्वारा स्कैन किया जाता है। @GlideModule एनोटेशन इसे स्वचालित रूप से पंजीकृत करता है।
@GlideModule
public class MyGlideModule extends AppGlideModule {
@Override
public void applyOptions(Context context, GlideBuilder builder) {
int diskCacheSize = 250 * 1024 * 1024;
builder.setDiskCache(
new DiskLruCacheFactory(cacheDir.getPath(), diskCacheSize)
);
}
}
नीचे दिए गए उदाहरण विशिष्ट परिदृश्यों को दर्शाते हैं: इमेज लोडिंग, GIF के साथ काम करना और वीडियो फ्रेम निष्कर्षण।
Glide.with().load().into() के माध्यम से बुनियादी लोडिंग — नेटवर्क से इमेज प्रदर्शित करने के लिए न्यूनतम कोड। Glide स्वचालित रूप से ImageView आकार में समायोजित हो जाता है। लोडिंग के दौरान प्लेसहोल्डर दिखाया जाता है, और विफलता पर error दिखाया जाता है।
Glide.with(fragment)
.load("https://example.com/photo.jpg")
.placeholder(R.drawable.placeholder)
.error(R.drawable.error)
.skipMemoryCache(true)
.diskCacheStrategy(DiskCacheStrategy.NONE)
.into(imageView)
GIF उसी तरह लोड किया जाता है जैसे स्थिर इमेज — Glide स्वचालित रूप से सामग्री प्रकार द्वारा प्रारूप का पता लगाता है। स्थिर इमेज के रूप में जबरन लोडिंग के लिए asBitmap() का उपयोग करें; GIF के लिए asGif() का उपयोग करें। Glide केवल दृश्यमान फ्रेम को कुशलतापूर्वक डिकोड करता है।
Glide.with(context)
.asGif()
.load("https://example.com/animation.gif")
.into(imageView)
// GIF के पहले फ्रेम को स्थिर छवि के रूप में लोड करें
Glide.with(context)
.asBitmap()
.load("https://example.com/animation.gif")
.into(imageView)
एक वीडियो फ्रेम स्थानीय या रिमोट वीडियो URI से Glide द्वारा निकाला जाता है। डिफ़ॉल्ट रूप से, Glide की फ्रेम लोड करता है। एक विशिष्ट टाइमस्टैम्प निर्दिष्ट करने के लिए frameMillis का उपयोग करें। यह वीडियो गैलरी में प्रीव्यू प्रदर्शित करने के लिए सुविधाजनक है।
String videoUrl = "https://example.com/video.mp4";
Glide.with(context)
.asBitmap()
.load(videoUrl)
.override(200, 200)
.into(imageView)
बड़ी संख्या में इमेज वाले एप्लिकेशन विकसित करते समय RecyclerView के लिए Glide अनुकूलन एक महत्वपूर्ण कौशल है। उचित कॉन्फ़िगरेशन लैग और OOM त्रुटियों को रोकता है।
Glide की प्रमुख विशेषताओं में से एक RecyclerViewPreloader के माध्यम से RecyclerView एकीकरण है। यह घटक स्क्रॉल गति और दिशा का विश्लेषण करता है, उन इमेज को प्रीलोड करता है जो कुछ आइटम में स्क्रीन पर दिखाई देंगी। प्रीलोडर का उपयोग करने के लिए, आपको PreloadSizeProvider इंटरफ़ेस लागू करना होगा और इसे लक्ष्य ImageView के साथ कंस्ट्रक्टर में पास करना होगा।
सटीक ImageView आयामों के साथ override() विधि का उपयोग लोडिंग को काफी तेज़ करता है। जब Glide को लक्ष्य का सटीक आकार पता होता है, तो वह स्केलिंग चरण को छोड़ते हुए इमेज को सीधे आवश्यक रिज़ॉल्यूशन में डिकोड कर सकता है। यह डिकोडिंग समय और पीक मेमोरी खपत को 30–40% तक कम करता है।
विषम सामग्री वाली फ़ीड के लिए, प्रत्येक आइटम प्रकार के लिए अलग-अलग RequestOptions का उपयोग करें। उदाहरण के लिए, बड़ी बैनर इमेज के लिए, आप override(1200, 600) और RGB_565 गुणवत्ता सेट कर सकते हैं, जबकि अवतार के लिए — override(200, 200) और transform के माध्यम से गोलाई। यह दृष्टिकोण प्रत्येक सामग्री प्रकार के लिए संसाधनों का इष्टतम उपयोग करता है।
Glide त्रुटि इमेज और कस्टम RequestListener के माध्यम से त्रुटि प्रबंधन के लिए लचीले विकल्प प्रदान करता है। RequestListener सफल लोडिंग या विफलता पर प्रतिक्रिया करने की अनुमति देता है — त्रुटियों को लॉग करना या एनालिटिक्स भेजना। आप फ़ॉलबैक भी कॉन्फ़िगर कर सकते हैं — एक इमेज जो तब दिखाई जाती है जब load() को URL के बजाय null प्राप्त होता है।
उपयोगकर्ता द्वारा उन तक स्क्रॉल करने से पहले इमेज प्रीलोड करने के लिए RecyclerViewPreloader का उपयोग करें। Glide एक प्रीलोडर के माध्यम से RecyclerView एकीकरण का समर्थन करता है जो स्क्रॉल गति का विश्लेषण करता है और इमेज को अग्रिम रूप से लोड करता है।
थंबनेल गुणन पहले इमेज का छोटा संस्करण दिखाने की अनुमति देता है, फिर पूर्ण संस्करण लोड करता है। thumbnail(0.25f) कॉल करने से 25% आकार का संस्करण लोड होता है जो तुरंत दिखाया जाता है, जबकि पूर्ण आकार की इमेज बाद में लोड होती है। यह तत्काल लोडिंग का आभास देता है।
सूची एडेप्टर के लिए, सटीक ImageView आयामों के साथ .override() का उपयोग करें ताकि Glide हर बार इमेज को स्केल न करे। यह CPU लोड और मेमोरी खपत को कम करता है। कैश आकार प्रयोगात्मक रूप से चुना जाता है, लेकिन डिस्क के लिए 250 MB और उपलब्ध मेमोरी का 20% एक अच्छा प्रारंभिक बिंदु है।
अक्सर पूछे जाने वाले प्रश्न
Glide GIF, वीडियो फ्रेम और एनिमेटेड WebP का समर्थन करता है। यह मेमोरी का अधिक कुशलता से प्रबंधन करता है और Google द्वारा अनुशंसित है। Picasso आकार में छोटा और उपयोग में सरल है। जटिल प्रोजेक्ट के लिए Glide चुनें।
Glide LifecycleOwner (Fragment, Activity) या View स्वीकार करता है। लाइब्रेरी LifecycleObserver के माध्यम से स्वचालित रूप से स्थिति को ट्रैक करती है: रुकने पर लोडिंग रोकती है और नष्ट होने पर रद्द करती है, लीक को रोकती है।
हाँ, load() से पहले asBitmap() का उपयोग करें। Glide GIF को स्थिर इमेज के रूप में लोड करेगा और केवल पहला फ्रेम दिखाएगा। यह सूचियों के लिए उपयोगी है जहाँ प्रदर्शन कारणों से GIF एनिमेशन अवांछनीय है।
Glide कैश तीन स्तरों से बना है: सक्रिय संसाधन (वर्तमान में उपयोग में), मेमोरी (LRU कैश) और डिस्क (LruCache)। कैश से लोड की गई इमेज तुरंत प्रदर्शित होती हैं। मेमोरी कम होने पर कैश स्वचालित रूप से साफ़ हो जाता है।
एक कस्टम HTTP क्लाइंट AppGlideModule में OkHttpUrlLoader के माध्यम से पंजीकृत किया जाता है। registerComponents को ओवरराइड करें और अपना OkHttpClient पंजीकृत करें। यह इंटरसेप्टर, प्रमाणपत्र और कस्टम टाइमआउट जोड़ने की अनुमति देता है।
सारांश
हम एक मोबाइल एप्लिकेशन टर्नकी विकसित करेंगे
IT Sectr 2017 से स्टार्टअप और व्यवसायों के लिए iOS और Android एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।
यह भी पढ़ें