Glide: چیست، کتابخانه تصاویر و کاربرد در Android

نویسنده: IT Sectr منتشر شده: 2026-05-05 زمان مطالعه: 8 دقیقه

Glide — کتابخانه‌ای برای بارگذاری تصاویر در Android است که توسط Google از طریق پروژه Bumptech پشتیبانی می‌شود. این کتابخانه بارگذاری مؤثر تصاویر، انیمیشن‌های GIF و فریم‌های ویدئو را با مدیریت خودکار حافظه فراهم می‌کند. بر اساس داده‌های مخزن GitHub Glide، این پروژه در بیش از ۲۰۰٬۰۰۰ برنامه استفاده می‌شود. Glide توسط Google به عنوان کتابخانه ترجیحی برای بارگذاری گرافیک در Android توصیه می‌شود.

نکات اصلی

  • Glide — کتابخانه بارگذاری تصاویر از Google با پشتیبانی از GIF و فریم‌های ویدئو
  • کش‌کردن سه سطحی: حافظه، دیسک و منابع فعال برای حداکثر سرعت
  • چرخه حیات — Glide به طور خودکار درخواست‌ها را هنگام توقف Activity متوقف می‌کند
  • GIF و WebP متحرک بدون پلاگین اضافی پشتیبانی می‌شوند
  • Thumbnail امکان نمایش نسخه کوچک‌شده و سپس نسخه کامل را فراهم می‌کند

Glide چیست؟

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

Glide مجموعه گسترده‌ای از عملکردها را برای کار با تصاویر فراهم می‌کند که هم سناریوهای ساده و هم پیچیده بارگذاری محتوا را پوشش می‌دهد.

پشتیبانی از GIF و WebP متحرک

GIF و WebP متحرک Glide به سادگی تصاویر ایستا بارگذاری و نمایش می‌دهد. کتابخانه به طور خودکار فرمت را بر اساس نوع MIME تشخیص داده و انیمیشن را رمزگشایی می‌کند و فریم‌ها را در یک رشته پس‌زمینه نمایش می‌دهد. برای مدیریت پخش، متدهای asGif و asBitmap در دسترس هستند.

ادغام با چرخه حیات

Glide به طور خودکار به چرخه حیات Activity، Fragment و View متصل می‌شود. هنگام توقف Activity بارگذاری‌ها متوقف می‌شوند و هنگام نابودی لغو می‌شوند. این کار از نشت حافظه و بارگذاری تصاویر برای صفحات بسته‌شده جلوگیری می‌کند. ادغام از طریق پشتیبانی LifecycleOwner کار می‌کند.

بارگذاری فریم‌های ویدئو

Glide می‌تواند فریم‌هایی را از ویدئو با URL یا مسیر محلی استخراج کند. برای این کار از متد asBitmap() در ترکیب با load() برای URI ویدئو استفاده می‌شود. Glide به طور خودکار فریم کلیدی یا فریم را با برچسب زمانی مشخص انتخاب می‌کند. این برای نمایش پیش‌نمایش ویدئو مفید است.

تولید و پیکربندی GlideApp

GlideApp — کلاسی تولیدشده است که API پیشرفته‌ای را بر اساس پیکربندی AppGlideModule فراهم می‌کند. با استفاده از آن می‌توان از متدهایی استفاده کرد که در Glide.with استاندارد در دسترس نیستند: بارگذاری با گزینه‌های پیش‌فرض سفارشی، ادغام با کتابخانه‌ها و تبدیل‌های از پیش تعیین‌شده. برای تولید، حاشیه‌نویسی @GlideModule در کلاسی که از AppGlideModule ارث‌بری می‌کند مورد نیاز است.

Glide چگونه کار می‌کند؟

Glide از معماری چندلایه با موتور، رمزگشاها، تبدیل‌ها و کش استفاده می‌کند. هر درخواست از زنجیره‌ای از پردازشگرها عبور می‌کند که بارگذاری را برای یک ImageView خاص بهینه می‌کنند.

معماری و pipeline

هنگام فراخوانی into(view) Glide کش را بررسی می‌کند: منابع فعال، کش حافظه RAM، کش دیسک و سپس شبکه. تصویر به طور خودکار به اندازه ImageView هدف با در نظر گرفتن تراکم صفحه و scaleType مقیاس‌بندی می‌شود. این کار مصرف حافظه را کاهش می‌دهد — مزیت کلیدی Glide.

java
Glide.with(context)
    .load("https://example.com/image.jpg")
    .placeholder(R.drawable.loading)
    .error(R.drawable.error)
    .override(400, 300)
    .centerCrop()
    .into(imageView)

نصب و پیکربندی Glide

نصب Glide از طریق Gradle انجام می‌شود. کتابخانه برای تولید API نیاز به پیکربندی از طریق AppGlideModule دارد. حداقل نسخه Android API — 21.

افزودن وابستگی‌ها

در build.gradle Glide را با پردازشگر حاشیه‌نویسی kapt برای تولید API GlideApp اضافه کنید. برای Kotlin به جای annotationProcessor از kapt استفاده کنید. نسخه Glide 4.16+ به طور پایدار با Android Gradle Plugin 8.x کار می‌کند.

groovy
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

AppGlideModule — مؤلفه الزامی برای پیکربندی Glide است. این امکان را فراهم می‌کند تا اندازه کش، HttpStack سفارشی را تنظیم کرده و رمزگشاهای خود را ثبت کنید. ماژول هنگام راه‌اندازی برنامه توسط Glide اسکن می‌شود. حاشیه‌نویسی @GlideModule آن را به طور خودکار ثبت می‌کند.

java
@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)
        );
    }
}

نمونه‌های استفاده از Glide

نمونه‌ها در زیر سناریوهای معمول را نشان می‌دهند: بارگذاری تصویر، کار با GIF و استخراج فریم ویدئو.

بارگذاری تصویر با placeholder

بارگذاری پایه از طریق Glide.with().load().into() — حداقل کد برای نمایش تصویر از شبکه. Glide به طور خودکار اندازه ImageView را تنظیم می‌کند. Placeholder در طول بارگذاری و error در صورت خطا نمایش داده می‌شود.

java
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

GIF مانند تصویر ایستا بارگذاری می‌شود — Glide به طور خودکار فرمت را بر اساس نوع محتوا تشخیص می‌دهد. برای بارگذاری اجباری به‌عنوان تصویر ایستا از asBitmap() و برای GIF از asGif() استفاده کنید. Glide فقط فریم‌های قابل مشاهده را به طور مؤثر رمزگشایی می‌کند.

java
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 استفاده می‌شود. این برای نمایش پیش‌نمایش در گالری ویدئو مفید است.

java
String videoUrl = "https://example.com/video.mp4";

Glide.with(context)
    .asBitmap()
    .load(videoUrl)
    .override(200, 200)
    .into(imageView)

بهینه‌سازی Glide برای لیست‌های بزرگ

بهینه‌سازی 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 با Picasso چیست؟

Glide از GIF، فریم‌های ویدئو و WebP متحرک پشتیبانی می‌کند. حافظه را مؤثرتر مدیریت می‌کند و توسط Google توصیه می‌شود. Picasso کوچک‌تر و استفاده از آن ساده‌تر است. برای پروژه‌های پیچیده Glide را انتخاب کنید.

Glide چگونه به چرخه حیات متصل می‌شود؟

Glide LifecycleOwner (Fragment, Activity) یا View را دریافت می‌کند. کتابخانه به طور خودکار وضعیت را از طریق LifecycleObserver پیگیری می‌کند: بارگذاری را در توقف متوقف و در نابودی لغو می‌کند و از نشت جلوگیری می‌کند.

آیا می‌توان فقط اولین فریم GIF را در Glide بارگذاری کرد؟

بله، قبل از load() از asBitmap() استفاده کنید. Glide GIF را به‌عنوان تصویر ایستا بارگذاری کرده و فقط اولین فریم را نشان می‌دهد. این برای لیست‌هایی که انیمیشن GIF به دلیل عملکرد نامطلوب است مفید می‌باشد.

کش Glide چگونه بر عملکرد تأثیر می‌گذارد؟

کش Glide از سه سطح تشکیل شده است: منابع فعال (در حال استفاده)، حافظه RAM (کش LRU) و دیسک (LruCache). تصاویر بارگذاری‌شده از کش بلافاصله نمایش داده می‌شوند. کش در صورت کمبود حافظه به طور خودکار پاک می‌شود.

چگونه یک کلاینت HTTP سفارشی برای Glide تنظیم کنیم؟

کلاینت HTTP سفارشی از طریق OkHttpUrlLoader در AppGlideModule ثبت می‌شود. registerComponents را بازنویسی کرده و OkHttpClient خود را ثبت کنید. این امکان اضافه کردن interceptors، گواهینامه‌ها و زمان‌های انتظار سفارشی را فراهم می‌کند.

خلاصه

  • Glide — کتابخانه بارگذاری تصاویر از Google با پشتیبانی از GIF و فریم‌های ویدئو
  • کش سه سطحی دسترسی آنی به تصاویر بارگذاری‌شده مکرر را فراهم می‌کند
  • چرخه حیات به طور خودکار درخواست‌ها را متوقف و لغو می‌کند
  • فریم‌های ویدئو از ویدئوهای محلی و راه دور از طریق asBitmap استخراج می‌شوند
  • ضرب thumbnail نمایش تصاویر در لیست‌ها را سرعت می‌بخشد
  • توصیه Google Glide را به استانداردی برای برنامه‌های Android تبدیل می‌کند
  • RecyclerViewPreloader تصاویر را قبل از اسکرول کاربر از پیش بارگذاری می‌کند

ما یک اپلیکیشن موبایل به صورت کلید در دست توسعه خواهیم داد

IT Sectr از سال 2017 برنامه‌های iOS و Android را برای استارتاپ‌ها و کسب‌وکارها ایجاد می‌کند. ما به شما مشاوره می‌دهیم و بهترین راه‌حل را پیشنهاد خواهیم کرد.

بحث درباره پروژه

همچنین بخوانید