Glide: ما هي، مكتبة الصور والتطبيق في Android

المؤلف: IT Sectr نُشر: 2026-05-05 وقت القراءة: 8 دق

Glide هي مكتبة لتحميل الصور في Android، مدعومة من Google عبر مشروع Bumptech. توفر المكتبة تحميلاً فعالاً للصور ورسوم GIF المتحركة وإطارات الفيديو مع إدارة تلقائية للذاكرة. وفقاً لـ مستودع Glide على GitHub، يستخدم المشروع أكثر من 200,000 تطبيق. توصي Google باستخدام Glide كمكتبة مفضلة لتحميل الرسومات في 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 معين.

الهيكل وخط الأنابيب

عند استدعاء into(view)، تتحقق Glide من الذاكرة المؤقتة: الموارد النشطة، ذاكرة التخزين المؤقت، ذاكرة التخزين على القرص، ثم الشبكة فقط. يتم تحجيم الصورة تلقائياً لحجم 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. تتطلب المكتبة تكويناً عبر AppGlideModule لتوليد API. الحد الأدنى لإصدار Android API هو 21.

إضافة التبعيات

في build.gradle، أضف Glide مع معالج التعليقات kapt لتوليد API GlideApp. بالنسبة لـ Kotlin، استخدم kapt بدلاً من annotationProcessor. الإصدار 4.16+ من Glide يعمل بثبات مع 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"
}

// استخدم kapt لـ Kotlin
// 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. يقوم هذا المكون بتحليل سرعة التمرير واتجاهه، محمّلاً مسبقاً الصور التي ستظهر على الشاشة بعد بضعة عناصر. لاستخدام المحمل المسبق، تحتاج إلى تنفيذ واجهة PreloadSizeProvider وتمريرها إلى المنشئ مع ImageView الهدف.

استخدام طريقة override() بأبعاد ImageView الدقيقة يسرع التحميل بشكل كبير. عندما تعرف Glide الحجم الدقيق للهدف، يمكنها فك تشفير الصورة مباشرة بالدقة المطلوبة، متجاوزة خطوة التحجيم. يقلل هذا من وقت فك التشفير واستهلاك الذروة للذاكرة بنسبة 30–40%.

للخلاصات ذات المحتوى غير المتجانس، استخدم RequestOptions مختلفة لكل نوع عنصر. على سبيل المثال، للصور الكبيرة كلافتات، يمكنك تعيين override(1200, 600) وجودة RGB_565، وبالنسبة للصور الرمزية — override(200, 200) وتدوير عبر transform. هذا النهج يستخدم الموارد بشكل أمثل لكل نوع محتوى.

معالجة أخطاء التحميل

توفر Glide خيارات مرنة لمعالجة الأخطاء من خلال صور الخطأ و RequestListener المخصص. يتيح RequestListener التفاعل مع التحميل الناجح أو الفشل — تسجيل الأخطاء أو إرسال التحليلات. يمكنك أيضاً تكوين fallback — صورة تظهر عندما يتلقى load() قيمة null بدلاً من رابط.

استخدم RecyclerViewPreloader لتحميل الصور مسبقاً قبل أن يقوم المستخدم بالتمرير إليها. تدعم Glide التكامل مع RecyclerView من خلال محمل مسبق يحلل سرعة التمرير ويحمل الصور مسبقاً.

تعدد الصور المصغرة يتيح عرض نسخة مصغرة من الصورة أولاً، ثم تحميل النسخة الكاملة. استدعاء thumbnail(0.25f) يحمّل نسخة بحجم 25% تظهر فوراً، بينما يتم تحميل الصورة كاملة الحجم لاحقاً. يخلق هذا انطباعاً بالتحميل الفوري.

بالنسبة لمحولات القوائم، استخدم .override() بأبعاد ImageView دقيقة حتى لا تقوم Glide بقياس الصورة في كل مرة. يقلل هذا من حمل وحدة المعالجة المركزية واستهلاك الذاكرة. يتم اختيار حجم الذاكرة المؤقتة تجريبياً، لكن 250 ميجابايت للقرص و 20% من الذاكرة المتوفرة هي نقطة بداية جيدة.

الأسئلة الشائعة

ما الفرق بين Glide و Picasso؟

Glide تدعم GIF وإطارات الفيديو و WebP المتحركة. تدير الذاكرة بكفاءة أكبر وتوصي بها Google. Picasso أصغر حجماً وأسهل في الاستخدام. للمشاريع المعقدة، اختر Glide.

كيف ترتبط Glide بدورة الحياة؟

Glide تقبل LifecycleOwner (Fragment, Activity) أو View. تتابع المكتبة الحالة تلقائياً عبر LifecycleObserver: توقف التحميل عند الإيقاف وتلغيه عند التدمير، مما يمنع تسرب الذاكرة.

هل يمكن تحميل الإطار الأول فقط من GIF في Glide؟

نعم، استخدم asBitmap() قبل load(). ستقوم Glide بتحميل GIF كصورة ثابتة وعرض الإطار الأول فقط. هذا مفيد للقوائم حيث حركة GIF غير مرغوب فيها لأسباب تتعلق بالأداء.

كيف يؤثر التخزين المؤقت لـ Glide على الأداء؟

يتكون التخزين المؤقت لـ Glide من ثلاثة مستويات: الموارد النشطة (قيد الاستخدام حالياً)، الذاكرة (ذاكرة LRU مؤقتة)، والقرص (LruCache). يتم عرض الصور المحملة من الذاكرة المؤقتة فوراً. يتم مسح الذاكرة المؤقتة تلقائياً عند انخفاض الذاكرة.

كيف تكوين عميل HTTP مخصص لـ Glide؟

يتم تسجيل عميل HTTP مخصص عبر OkHttpUrlLoader في AppGlideModule. تجاوز registerComponents وسجل OkHttpClient الخاص بك. يتيح هذا إضافة المعترضات والشهادات والمهلات الزمنية المخصصة.

الخلاصة

  • Glide — مكتبة تحميل الصور من Google مع دعم GIF وإطارات الفيديو
  • ذاكرة تخزين مؤقت ثلاثية المستويات توفر وصولاً فورياً للصور المعاد تحميلها
  • دورة الحياة توقف وتلغي الطلبات تلقائياً
  • إطارات الفيديو تُستخرج من مقاطع الفيديو المحلية والبعيدة عبر asBitmap
  • Thumbnail المتعدد يسرع عرض الصور في القوائم
  • توصية Google تجعل Glide المعيار لتطبيقات Android
  • RecyclerViewPreloader يحمّل الصور مسبقاً قبل أن يمرر المستخدم إليها

سنقوم بتطوير تطبيق جوال جاهز

تقدم IT Sectr تطبيقات iOS وAndroid للشركات الناشئة والشركات منذ عام 2017. سوف نقدم لك النصح ونقترح أفضل حل.

مناقشة المشروع

اقرأ أيضًا