Glide — کتابخانهای برای بارگذاری تصاویر در Android است که توسط Google از طریق پروژه Bumptech پشتیبانی میشود. این کتابخانه بارگذاری مؤثر تصاویر، انیمیشنهای GIF و فریمهای ویدئو را با مدیریت خودکار حافظه فراهم میکند. بر اساس دادههای مخزن GitHub Glide، این پروژه در بیش از ۲۰۰٬۰۰۰ برنامه استفاده میشود. Glide توسط Google به عنوان کتابخانه ترجیحی برای بارگذاری گرافیک در Android توصیه میشود.
نکات اصلی
Glide — کتابخانهای برای بارگذاری سریع و مؤثر تصاویر، GIFهای متحرک و فریمهای ویدئو در برنامههای Android است. این پروژه توسط Bumptech تحت نظر Google توسعه مییابد و به طور گسترده در برنامههای رسمی Google استفاده میشود.
معماری داخلی Glide بر روی رویکرد مؤلفهای ساخته شده است: Engine اجرای درخواستها را مدیریت میکند، DecodeJob مسئول رمزگشایی است و ResourceDecoder دادههای خام را به Bitmap یا Drawable تبدیل میکند. هر مرحله میتواند از طریق ماژولها و ثباتها سفارشیسازی شود که Glide را به کتابخانهای بسیار انعطافپذیر برای فرمتهای تصویر غیراستاندارد تبدیل میکند.
برخلاف بسیاری از رقبا، Glide از ابتدا با در نظر گرفتن ویژگیهای Android طراحی شده است: چرخه حیات Activity و Fragment، چرخش صفحه، تغییر پیکربندی. کتابخانه به طور خودکار بارگذاریها را بسته به وضعیت مؤلفه متوقف و ازسر میگیرد.
طبق Android Developers، Glide کتابخانه توصیهشده برای بارگذاری تصاویر در مستندات رسمی Google است. این کتابخانه در برنامههای Google Play، Google Maps و سایر محصولات شرکت استفاده میشود که قابلیت اطمینان و عملکرد آن را تأیید میکند.
تفاوت کلیدی Glide با رقبا — مقیاسبندی خودکار تصاویر به اندازه ImageView است. اگر Picasso تصویر را با وضوح کامل بارگذاری کرده و سپس مقیاسبندی میکند، Glide فایل را مستقیماً در اندازه مورد نیاز رمزگشایی میکند. این مصرف حافظه اوج را کاهش میدهد و نمایش در لیستهایی با اندازههای مختلف سلول را سرعت میبخشد.
Glide مجموعه گستردهای از عملکردها را برای کار با تصاویر فراهم میکند که هم سناریوهای ساده و هم پیچیده بارگذاری محتوا را پوشش میدهد.
GIF و WebP متحرک Glide به سادگی تصاویر ایستا بارگذاری و نمایش میدهد. کتابخانه به طور خودکار فرمت را بر اساس نوع MIME تشخیص داده و انیمیشن را رمزگشایی میکند و فریمها را در یک رشته پسزمینه نمایش میدهد. برای مدیریت پخش، متدهای asGif و asBitmap در دسترس هستند.
Glide به طور خودکار به چرخه حیات Activity، Fragment و View متصل میشود. هنگام توقف Activity بارگذاریها متوقف میشوند و هنگام نابودی لغو میشوند. این کار از نشت حافظه و بارگذاری تصاویر برای صفحات بستهشده جلوگیری میکند. ادغام از طریق پشتیبانی LifecycleOwner کار میکند.
Glide میتواند فریمهایی را از ویدئو با URL یا مسیر محلی استخراج کند. برای این کار از متد asBitmap() در ترکیب با load() برای URI ویدئو استفاده میشود. Glide به طور خودکار فریم کلیدی یا فریم را با برچسب زمانی مشخص انتخاب میکند. این برای نمایش پیشنمایش ویدئو مفید است.
GlideApp — کلاسی تولیدشده است که API پیشرفتهای را بر اساس پیکربندی AppGlideModule فراهم میکند. با استفاده از آن میتوان از متدهایی استفاده کرد که در Glide.with استاندارد در دسترس نیستند: بارگذاری با گزینههای پیشفرض سفارشی، ادغام با کتابخانهها و تبدیلهای از پیش تعیینشده. برای تولید، حاشیهنویسی @GlideModule در کلاسی که از AppGlideModule ارثبری میکند مورد نیاز است.
Glide از معماری چندلایه با موتور، رمزگشاها، تبدیلها و کش استفاده میکند. هر درخواست از زنجیرهای از پردازشگرها عبور میکند که بارگذاری را برای یک ImageView خاص بهینه میکنند.
هنگام فراخوانی into(view) Glide کش را بررسی میکند: منابع فعال، کش حافظه RAM، کش دیسک و سپس شبکه. تصویر به طور خودکار به اندازه ImageView هدف با در نظر گرفتن تراکم صفحه و scaleType مقیاسبندی میشود. این کار مصرف حافظه را کاهش میدهد — مزیت کلیدی 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 Glide را با پردازشگر حاشیهنویسی kapt برای تولید API GlideApp اضافه کنید. برای 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 را تنظیم میکند. Placeholder در طول بارگذاری و 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)
فریم ویدئو توسط Glide بر اساس URI ویدئوی محلی یا راه دور استخراج میشود. به طور پیشفرض Glide فریم کلیدی را بارگذاری میکند. برای تعیین برچسب زمانی خاص از frameMillis استفاده میشود. این برای نمایش پیشنمایش در گالری ویدئو مفید است.
String videoUrl = "https://example.com/video.mp4";
Glide.with(context)
.asBitmap()
.load(videoUrl)
.override(200, 200)
.into(imageView)
بهینهسازی Glide برای RecyclerView — مهارتی حیاتی هنگام توسعه برنامههایی با تعداد زیادی تصویر است. پیکربندی صحیح از کندی و خطاهای OOM جلوگیری میکند.
یکی از قابلیتهای کلیدی Glide — ادغام با RecyclerView از طریق RecyclerViewPreloader. این مؤلفه سرعت اسکرول و جهت حرکت را تحلیل میکند و تصاویری را که چند عنصر بعد روی صفحه ظاهر میشوند از پیش بارگذاری میکند. برای کار با preloader باید رابط PreloadSizeProvider را پیادهسازی کرده و آن را به همراه ImageView هدف به سازنده ارسال کنید.
استفاده از متد override() با اندازههای دقیق ImageView بارگذاری را به طور قابل توجهی سرعت میبخشد. وقتی Glide اندازه دقیق هدف را میداند، میتواند تصویر را مستقیماً در وضوح مورد نیاز رمزگشایی کند و مرحله مقیاسبندی را رد کند. این زمان رمزگشایی را کوتاه میکند و مصرف حافظه اوج را ۳۰-۴۰٪ کاهش میدهد.
برای فیدهایی با محتوای ناهمگن از RequestOptions مختلف برای هر نوع عنصر استفاده کنید. به عنوان مثال، برای تصاویر بنر بزرگ میتوان override(1200, 600) و کیفیت RGB_565 و برای آواتارها — override(200, 200) و گرد کردن از طریق transform تنظیم کرد. چنین رویکردی امکان استفاده بهینه از منابع را برای هر نوع محتوا فراهم میکند.
Glide امکانات انعطافپذیری برای مدیریت خطاها از طریق تصاویر error و RequestListener سفارشی فراهم میکند. RequestListener امکان واکنش به بارگذاری موفق یا خطا، ثبت خرابیها یا ارسال آمار را فراهم میکند. همچنین میتوان fallback — تصویری که وقتی load() به جای لینک null دریافت میکند نمایش داده میشود — تنظیم کرد.
برای بارگذاری از پیش تصاویر قبل از اینکه کاربر به آنها اسکرول کند از RecyclerViewPreloader استفاده کنید. Glide از ادغام با RecyclerView از طریق preloader که سرعت اسکرول را تحلیل کرده و تصاویر را از قبل بارگذاری میکند پشتیبانی میکند.
ضرب thumbnail اجازه میدهد ابتدا نسخه کوچکشده تصویر نمایش داده شود و سپس تصویر کامل بارگذاری شود. فراخوانی thumbnail(0.25f) نسخه ۲۵٪ اندازه را بارگذاری میکند که بلافاصله نمایش داده میشود و تصویر با اندازه کامل بعداً بارگذاری میشود. این حس بارگذاری آنی را ایجاد میکند.
برای آداپترهای لیست از .override() با اندازههای دقیق ImageView استفاده کنید تا Glide هر بار تصویر را مقیاسبندی نکند. این کار بار CPU را کاهش میدهد و مصرف حافظه را کاهش میدهد. اندازه کش به صورت تجربی انتخاب میشود، اما ۲۵۰ مگابایت برای دیسک و ۲۰٪ از حافظه موجود نقطه شروع خوبی است.
سوالات متداول
Glide از GIF، فریمهای ویدئو و WebP متحرک پشتیبانی میکند. حافظه را مؤثرتر مدیریت میکند و توسط Google توصیه میشود. Picasso کوچکتر و استفاده از آن سادهتر است. برای پروژههای پیچیده Glide را انتخاب کنید.
Glide LifecycleOwner (Fragment, Activity) یا View را دریافت میکند. کتابخانه به طور خودکار وضعیت را از طریق LifecycleObserver پیگیری میکند: بارگذاری را در توقف متوقف و در نابودی لغو میکند و از نشت جلوگیری میکند.
بله، قبل از load() از asBitmap() استفاده کنید. Glide GIF را بهعنوان تصویر ایستا بارگذاری کرده و فقط اولین فریم را نشان میدهد. این برای لیستهایی که انیمیشن GIF به دلیل عملکرد نامطلوب است مفید میباشد.
کش Glide از سه سطح تشکیل شده است: منابع فعال (در حال استفاده)، حافظه RAM (کش LRU) و دیسک (LruCache). تصاویر بارگذاریشده از کش بلافاصله نمایش داده میشوند. کش در صورت کمبود حافظه به طور خودکار پاک میشود.
کلاینت HTTP سفارشی از طریق OkHttpUrlLoader در AppGlideModule ثبت میشود. registerComponents را بازنویسی کرده و OkHttpClient خود را ثبت کنید. این امکان اضافه کردن interceptors، گواهینامهها و زمانهای انتظار سفارشی را فراهم میکند.
خلاصه
ما یک اپلیکیشن موبایل به صورت کلید در دست توسعه خواهیم داد
IT Sectr از سال 2017 برنامههای iOS و Android را برای استارتاپها و کسبوکارها ایجاد میکند. ما به شما مشاوره میدهیم و بهترین راهحل را پیشنهاد خواهیم کرد.
همچنین بخوانید