Glide est une bibliothèque de chargement d'images pour Android, soutenue par Google via le projet Bumptech. La bibliothèque assure un chargement efficace des images, des animations GIF et des images vidéo avec une gestion automatique de la mémoire. Selon le dépôt GitHub de Glide, le projet est utilisé par plus de 200 000 applications. Glide est recommandé par Google comme la bibliothèque préférée pour charger des graphiques dans Android.
Points clés
Glide est une bibliothèque de chargement rapide et efficace d'images, de GIF animés et d'images vidéo dans les applications Android. Le projet est développé par Bumptech sous l'égide de Google et est largement utilisé dans les applications officielles de Google.
L'architecture interne de Glide repose sur une approche basée sur les composants : le moteur gère l'exécution des requêtes, DecodeJob est responsable du décodage et ResourceDecoder convertit les données brutes en Bitmap ou Drawable. Chaque étape peut être personnalisée via des modules et des registres, ce qui rend Glide extrêmement flexible pour les formats d'image non standard.
Contrairement à de nombreux concurrents, Glide a été conçu dès le départ en tenant compte des spécificités d'Android : cycle de vie des Activity et Fragment, rotations d'écran, changements de configuration. La bibliothèque suspend et reprend automatiquement les chargements en fonction de l'état du composant.
Selon Android Developers, Glide est la bibliothèque recommandée pour le chargement d'images dans la documentation officielle de Google. Elle est utilisée dans Google Play, Google Maps et d'autres produits de l'entreprise, ce qui confirme sa fiabilité et ses performances.
La principale différence entre Glide et ses alternatives est le redimensionnement automatique des images à la taille de l'ImageView. Alors que Picasso charge l'image en pleine résolution puis la redimensionne, Glide décode le fichier directement à la taille nécessaire. Cela réduit la consommation maximale de mémoire et accélère l'affichage dans les listes avec différentes tailles de cellules.
Glide fournit un large ensemble de fonctions pour travailler avec les images, couvrant aussi bien les scénarios simples que complexes de chargement de contenu.
GIF et WebP animés sont chargés et affichés par Glide aussi facilement que des images statiques. La bibliothèque détecte automatiquement le format par le type MIME et décode l'animation, affichant les images dans un thread d'arrière-plan. Les méthodes asGif et asBitmap sont disponibles pour le contrôle de la lecture.
Glide se lie automatiquement au cycle de vie de l'Activity, du Fragment et de la View. Lorsqu'une Activity est mise en pause, les chargements sont suspendus ; lorsqu'elle est détruite, ils sont annulés. Cela évite les fuites de mémoire et le chargement d'images pour des écrans déjà fermés. L'intégration fonctionne via la prise en charge de LifecycleOwner.
Glide peut extraire des images de vidéos par URL ou chemin local. La méthode asBitmap() combinée à load() est utilisée pour les URI vidéo. Glide sélectionne automatiquement une image clé ou une image à un timestamp spécifié. C'est utile pour afficher des aperçus vidéo.
GlideApp est une classe générée qui fournit une API étendue basée sur la configuration d'AppGlideModule. Elle permet d'utiliser des méthodes indisponibles dans Glide.with standard : chargement avec des options personnalisées par défaut, intégration avec des bibliothèques et transformations prédéfinies. La génération nécessite l'annotation @GlideModule dans une classe qui étend AppGlideModule.
Glide utilise une architecture multicouche avec moteur, décodeurs, transformations et cache. Chaque requête passe par une chaîne de gestionnaires qui optimisent le chargement pour une ImageView spécifique.
Lorsque into(view) est appelé, Glide vérifie le cache : ressources actives, cache mémoire, cache disque et ensuite seulement le réseau. L'image est automatiquement redimensionnée à la taille de l'ImageView cible en tenant compte de la densité d'écran et du scaleType. Cela réduit l'utilisation de la mémoire — un avantage clé de Glide.
Glide.with(context)
.load("https://example.com/image.jpg")
.placeholder(R.drawable.loading)
.error(R.drawable.error)
.override(400, 300)
.centerCrop()
.into(imageView)
L'installation de Glide se fait via Gradle. La bibliothèque nécessite une configuration via AppGlideModule pour la génération d'API. La version minimale de l'API Android est 21.
Dans le build.gradle, ajoutez Glide avec le processeur d'annotations kapt pour la génération de l'API GlideApp. Pour Kotlin, utilisez kapt au lieu d'annotationProcessor. Glide version 4.16+ fonctionne de manière stable avec Android Gradle Plugin 8.x.
dependencies {
implementation "com.github.bumptech.glide:glide:4.16.0"
annotationProcessor "com.github.bumptech.glide:compiler:4.16.0"
}
// Utilisez kapt pour Kotlin
// kapt "com.github.bumptech.glide:compiler:4.16.0"
AppGlideModule est un composant obligatoire pour configurer Glide. Il permet de définir la taille du cache, un HttpStack personnalisé et d'enregistrer des décodeurs personnalisés. Le module est scanné par Glide au démarrage de l'application. L'annotation @GlideModule l'enregistre automatiquement.
@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)
);
}
}
Les exemples ci-dessous illustrent des scénarios typiques : chargement d'images, travail avec des GIF et extraction d'images vidéo.
Le chargement de base via Glide.with().load().into() — code minimal pour afficher une image depuis le réseau. Glide s'ajuste automatiquement à la taille de l'ImageView. Le placeholder est affiché pendant le chargement et error en cas d'échec.
Glide.with(fragment)
.load("https://example.com/photo.jpg")
.placeholder(R.drawable.placeholder)
.error(R.drawable.error)
.skipMemoryCache(true)
.diskCacheStrategy(DiskCacheStrategy.NONE)
.into(imageView)
Un GIF se charge comme une image statique — Glide détecte automatiquement le format par le type de contenu. Pour forcer le chargement comme image statique, utilisez asBitmap() ; pour un GIF, utilisez asGif(). Glide décode efficacement uniquement les images visibles.
Glide.with(context)
.asGif()
.load("https://example.com/animation.gif")
.into(imageView)
// Charger la première image d'un GIF comme image statique
Glide.with(context)
.asBitmap()
.load("https://example.com/animation.gif")
.into(imageView)
Une image vidéo est extraite par Glide depuis une URI vidéo locale ou distante. Par défaut, Glide charge l'image clé. Pour spécifier un timestamp précis, utilisez frameMillis. C'est pratique pour afficher des aperçus dans une galerie vidéo.
String videoUrl = "https://example.com/video.mp4";
Glide.with(context)
.asBitmap()
.load(videoUrl)
.override(200, 200)
.into(imageView)
L'optimisation de Glide pour RecyclerView est une compétence cruciale lors du développement d'applications avec un grand nombre d'images. Une configuration appropriée évite les ralentissements et les erreurs OOM.
L'une des fonctionnalités clés de Glide est l'intégration avec RecyclerView via RecyclerViewPreloader. Ce composant analyse la vitesse et la direction du défilement, préchargeant les images qui apparaîtront à l'écran dans quelques éléments. Pour utiliser le préchargeur, vous devez implémenter l'interface PreloadSizeProvider et la passer au constructeur avec l'ImageView cible.
L'utilisation de la méthode override() avec des dimensions exactes de l'ImageView accélère considérablement le chargement. Lorsque Glide connaît la taille exacte de la cible, il peut décoder l'image directement à la résolution requise, en sautant l'étape de redimensionnement. Cela réduit le temps de décodage et la consommation maximale de mémoire de 30 à 40 %.
Pour les flux avec du contenu hétérogène, utilisez différents RequestOptions pour chaque type d'élément. Par exemple, pour les grandes images de bannière, vous pouvez définir override(1200, 600) et la qualité RGB_565, tandis que pour les avatars — override(200, 200) et l'arrondi via transform. Cette approche utilise de manière optimale les ressources pour chaque type de contenu.
Glide offre des options flexibles de gestion des erreurs via des images d'erreur et un RequestListener personnalisé. RequestListener permet de réagir à un chargement réussi ou à un échec — enregistrer les erreurs ou envoyer des analyses. Vous pouvez également configurer un fallback — une image affichée lorsque load() reçoit null au lieu d'une URL.
Utilisez RecyclerViewPreloader pour précharger les images avant que l'utilisateur ne défile jusqu'à elles. Glide prend en charge l'intégration avec RecyclerView via un préchargeur qui analyse la vitesse de défilement et charge les images à l'avance.
La multiplication de thumbnail permet d'afficher d'abord une version réduite de l'image, puis de charger la version complète. L'appel de thumbnail(0.25f) charge une version à 25 % de la taille qui s'affiche immédiatement, tandis que l'image en pleine taille est chargée plus tard. Cela crée l'impression d'un chargement instantané.
Pour les adaptateurs de liste, utilisez .override() avec des dimensions exactes de l'ImageView pour que Glide ne redimensionne pas l'image à chaque fois. Cela réduit la charge du processeur et la consommation de mémoire. La taille du cache est choisie expérimentalement, mais 250 Mo pour le disque et 20 % de la mémoire disponible constituent un bon point de départ.
Foire aux questions
Glide prend en charge les GIF, les images vidéo et les WebP animés. Il gère la mémoire plus efficacement et est recommandé par Google. Picasso est plus petit et plus simple à utiliser. Pour les projets complexes, choisissez Glide.
Glide accepte un LifecycleOwner (Fragment, Activity) ou une View. La bibliothèque suit automatiquement l'état via LifecycleObserver : suspend le chargement lors de la pause et l'annule lors de la destruction, évitant les fuites.
Oui, utilisez asBitmap() avant load(). Glide chargera le GIF comme une image statique et n'affichera que la première image. C'est utile pour les listes où l'animation GIF n'est pas souhaitable pour des raisons de performance.
Le cache de Glide se compose de trois niveaux : ressources actives (actuellement utilisées), mémoire (cache LRU) et disque (LruCache). Les images chargées depuis le cache s'affichent instantanément. Le cache est automatiquement vidé lorsque la mémoire est insuffisante.
Un client HTTP personnalisé est enregistré via OkHttpUrlLoader dans AppGlideModule. Remplacez registerComponents et enregistrez votre OkHttpClient. Cela permet d'ajouter des intercepteurs, des certificats et des timeouts personnalisés.
Résumé
Nous développerons une application mobile clé en main
IT Sectr crée des applications iOS et Android pour les startups et les entreprises depuis 2017. Nous vous conseillerons et vous proposerons la meilleure solution.
Lisez aussi