Glide es una biblioteca para cargar imágenes en Android, respaldada por Google a través del proyecto Bumptech. La biblioteca proporciona una carga eficiente de imágenes, animaciones GIF y fotogramas de video con gestión automática de memoria. Según el repositorio de Glide en GitHub, el proyecto es utilizado por más de 200 000 aplicaciones. Glide es recomendado por Google como la biblioteca preferida para cargar gráficos en Android.
Puntos clave
Glide es una biblioteca para la carga rápida y eficiente de imágenes, GIF animados y fotogramas de video en aplicaciones Android. El proyecto es desarrollado por Bumptech bajo el paraguas de Google y se utiliza ampliamente en aplicaciones oficiales de Google.
La arquitectura interna de Glide se basa en un enfoque basado en componentes: el Engine gestiona la ejecución de solicitudes, DecodeJob se encarga de la decodificación y ResourceDecoder convierte datos sin procesar en Bitmap o Drawable. Cada etapa se puede personalizar mediante módulos y registros, lo que hace de Glide una biblioteca extremadamente flexible para formatos de imagen no estándar.
A diferencia de muchos competidores, Glide fue diseñado desde el principio teniendo en cuenta las particularidades de Android: ciclo de vida de Activity y Fragment, rotaciones de pantalla, cambios de configuración. La biblioteca pausa y reanuda automáticamente las cargas según el estado del componente.
Según Android Developers, Glide es la biblioteca recomendada para la carga de imágenes en la documentación oficial de Google. Se utiliza en Google Play, Google Maps y otros productos de la empresa, lo que confirma su fiabilidad y rendimiento.
La diferencia clave entre Glide y sus alternativas es el escalado automático de imágenes al tamaño del ImageView. Mientras que Picasso carga la imagen a resolución completa y luego la escala, Glide decodifica el archivo directamente al tamaño necesario. Esto reduce el consumo máximo de memoria y acelera la visualización en listas con diferentes tamaños de celda.
Glide proporciona un amplio conjunto de funciones para trabajar con imágenes, cubriendo tanto escenarios simples como complejos de carga de contenido.
GIF y WebP animados se cargan y muestran con Glide tan fácilmente como las imágenes estáticas. La biblioteca detecta automáticamente el formato por tipo MIME y decodifica la animación, mostrando fotogramas en un hilo en segundo plano. Los métodos asGif y asBitmap están disponibles para controlar la reproducción.
Glide se vincula automáticamente al ciclo de vida de Activity, Fragment y View. Cuando una Activity se pausa, las cargas se suspenden; cuando se destruye, se cancelan. Esto evita fugas de memoria y la carga de imágenes para pantallas ya cerradas. La integración funciona a través del soporte de LifecycleOwner.
Glide puede extraer fotogramas de video mediante URL o ruta local. Se utiliza el método asBitmap() en combinación con load() para URI de video. Glide selecciona automáticamente un fotograma clave o un fotograma en una marca de tiempo especificada. Esto es útil para mostrar vistas previas de video.
GlideApp es una clase generada que proporciona una API extendida basada en la configuración de AppGlideModule. Permite utilizar métodos no disponibles en Glide.with estándar: carga con opciones personalizadas predeterminadas, integración con bibliotecas y transformaciones preestablecidas. La generación requiere la anotación @GlideModule en una clase que extiende AppGlideModule.
Glide utiliza una arquitectura de múltiples capas con motor, decodificadores, transformaciones y caché. Cada solicitud pasa a través de una cadena de controladores que optimizan la carga para un ImageView específico.
Cuando se llama a into(view), Glide verifica la caché: recursos activos, caché en memoria, caché en disco y solo luego la red. La imagen se escala automáticamente al tamaño del ImageView de destino teniendo en cuenta la densidad de pantalla y scaleType. Esto reduce el uso de memoria, una ventaja clave 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)
La instalación de Glide se realiza mediante Gradle. La biblioteca requiere configuración a través de AppGlideModule para la generación de API. La versión mínima de Android API es 21.
En build.gradle, agregue Glide con el procesador de anotaciones kapt para la generación de la API de GlideApp. Para Kotlin, use kapt en lugar de annotationProcessor. La versión 4.16+ de Glide funciona de forma estable con Android Gradle Plugin 8.x.
dependencies {
implementation "com.github.bumptech.glide:glide:4.16.0"
annotationProcessor "com.github.bumptech.glide:compiler:4.16.0"
}
// Use kapt para Kotlin
// kapt "com.github.bumptech.glide:compiler:4.16.0"
AppGlideModule es un componente obligatorio para configurar Glide. Permite establecer el tamaño de la caché, un HttpStack personalizado y registrar decodificadores propios. El módulo es escaneado por Glide al iniciar la aplicación. La anotación @GlideModule lo registra automáticamente.
@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)
);
}
}
Los ejemplos a continuación muestran escenarios típicos: carga de imágenes, trabajo con GIF y extracción de fotogramas de video.
La carga básica mediante Glide.with().load().into() — código mínimo para mostrar una imagen desde la red. Glide se ajusta automáticamente al tamaño del ImageView. El placeholder se muestra durante la carga y error en caso de fallo.
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 carga igual que una imagen estática — Glide detecta automáticamente el formato por tipo de contenido. Para forzar la carga como imagen estática, use asBitmap(); para GIF, use asGif(). Glide decodifica eficientemente solo los fotogramas visibles.
Glide.with(context)
.asGif()
.load("https://example.com/animation.gif")
.into(imageView)
// Cargar el primer fotograma de un GIF como imagen estática
Glide.with(context)
.asBitmap()
.load("https://example.com/animation.gif")
.into(imageView)
Un fotograma de video es extraído por Glide de una URI de video local o remota. Por defecto, Glide carga el fotograma clave. Para especificar una marca de tiempo concreta, use frameMillis. Esto es útil para mostrar vistas previas en una galería de videos.
String videoUrl = "https://example.com/video.mp4";
Glide.with(context)
.asBitmap()
.load(videoUrl)
.override(200, 200)
.into(imageView)
La optimización de Glide para RecyclerView es una habilidad crítica al desarrollar aplicaciones con una gran cantidad de imágenes. Una configuración adecuada evita retrasos y errores OOM.
Una de las características clave de Glide es la integración con RecyclerView a través de RecyclerViewPreloader. Este componente analiza la velocidad de desplazamiento y la dirección, precargando imágenes que aparecerán en pantalla en unos pocos elementos. Para usar el precargador, debe implementar la interfaz PreloadSizeProvider y pasarla al constructor junto con el ImageView de destino.
Usar el método override() con dimensiones exactas del ImageView acelera significativamente la carga. Cuando Glide conoce el tamaño exacto del destino, puede decodificar la imagen directamente en la resolución requerida, omitiendo el paso de escalado. Esto reduce el tiempo de decodificación y el consumo máximo de memoria en un 30–40%.
Para feeds con contenido heterogéneo, use diferentes RequestOptions para cada tipo de elemento. Por ejemplo, para imágenes de banner grandes, puede establecer override(1200, 600) y calidad RGB_565, mientras que para avatares — override(200, 200) y redondeo mediante transform. Este enfoque utiliza los recursos de manera óptima para cada tipo de contenido.
Glide ofrece opciones flexibles para el manejo de errores mediante imágenes de error y RequestListener personalizado. RequestListener permite reaccionar a una carga exitosa o a un error — registrar fallos o enviar análisis. También puede configurar un fallback — una imagen que se muestra cuando load() recibe null en lugar de una URL.
Use RecyclerViewPreloader para precargar imágenes antes de que el usuario se desplace hasta ellas. Glide admite la integración con RecyclerView mediante un precargador que analiza la velocidad de desplazamiento y carga las imágenes con antelación.
La multiplicación de thumbnail permite mostrar primero una versión reducida de la imagen y luego cargar la versión completa. Llamar a thumbnail(0.25f) carga una versión al 25% del tamaño que se muestra inmediatamente, mientras que la imagen a tamaño completo se carga después. Esto crea la impresión de carga instantánea.
Para adaptadores de lista, use .override() con dimensiones exactas del ImageView para que Glide no escale la imagen cada vez. Esto reduce la carga de la CPU y el consumo de memoria. El tamaño de la caché se selecciona experimentalmente, pero 250 MB para disco y 20% de la memoria disponible son un buen punto de partida.
Preguntas frecuentes
Glide admite GIF, fotogramas de video y WebP animados. Gestiona la memoria de manera más eficiente y es recomendado por Google. Picasso es más pequeño y más sencillo de usar. Para proyectos complejos, elija Glide.
Glide acepta un LifecycleOwner (Fragment, Activity) o View. La biblioteca rastrea automáticamente el estado a través de LifecycleObserver: pausa la carga al pausar y la cancela al destruir, evitando fugas.
Sí, use asBitmap() antes de load(). Glide cargará el GIF como una imagen estática y mostrará solo el primer fotograma. Esto es útil para listas donde la animación GIF no es deseada por razones de rendimiento.
La caché de Glide consta de tres niveles: recursos activos (en uso actualmente), memoria (caché LRU) y disco (LruCache). Las imágenes cargadas desde la caché se muestran al instante. La caché se limpia automáticamente cuando hay poca memoria.
Un cliente HTTP personalizado se registra a través de OkHttpUrlLoader en AppGlideModule. Sobrescriba registerComponents y registre su OkHttpClient. Esto permite añadir interceptores, certificados y tiempos de espera personalizados.
Resumen
Desarrollaremos una aplicación móvil llave en mano
IT Sectr crea aplicaciones para iOS y Android para startups y empresas desde 2017. Le asesoraremos y le propondremos la mejor solución.
Lea también