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 অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।
আরও পড়ুন