Github地址:https://github.com/bumptech/glide
中文文档:Glide v4 : 快速高效的Android图片加载库
Glide是Bumptech(已被 Google 关注)开源的、 Android 平台上最成熟、使用最广泛的图片加载与缓存库之一。能从网络、本地文件、资源 ID、Uri 等位置加载图片,并自动处理生命周期、内存缓存、磁盘缓存、图片压缩与变换,特别适合在RecyclerView中加载大量图片。
| 优势 | 说明 |
|---|---|
| 生命周期集成 | Glide.with(activity/fragment/view)自动绑定生命周期,页面销毁时取消请求,避免内存泄漏。 |
| 多级缓存 | 内存缓存 + 磁盘缓存,默认自动生效,加载速度极快。 |
| 占位与错误图 | 支持placeholder()、error()、fallback(),提升用户体验。 |
| 图片变换 | 内置centerCrop()、fitCenter()、circleCrop(),也支持自定义Transformation。 |
| GIF / 视频帧 | 原生支持 GIF、WebP、视频帧加载。 |
| RecyclerView 优化 | 自动取消复用 Item 上的旧请求,避免图片错位。 |
一、添加依赖
// app/build.gradle dependencies { implementation 'com.github.bumptech.glide:glide:4.16.0' annotationProcessor 'com.github.bumptech.glide:compiler:4.16.0' // 生成 GlideApp }添加网络权限
<uses-permission android:name="android.permission.INTERNET"/>二、基本用法(Java)
Glide.with(context) .load("https://example.com/image.jpg") .placeholder(R.drawable.placeholder) // 加载中显示 .error(R.drawable.error) // 加载失败显示 .centerCrop() // 裁剪方式 .into(imageView); // 目标 ImageViewwith()可以传入:
Activity/Fragment:推荐,自动管理生命周期。View:绑定 View 的生命周期。Context:不推荐,需手动控制。
三、 核心机制
1. 缓存策略
.diskCacheStrategy(DiskCacheStrategy.ALL) // 缓存原图和处理后的图常用值:
ALL:缓存原图 + 转换后的图(默认)。NONE:不缓存。DATA:只缓存原图。RESOURCE:只缓存转换后的图。AUTOMATIC:智能选择。
2. 请求优先级
.priority(Priority.HIGH)3. 缩略图
.thumbnail(0.25f) // 先加载 25% 尺寸的缩略图4. 自定义 RequestOptions
RequestOptions options = new RequestOptions() .placeholder(R.drawable.loading) .error(R.drawable.error) .diskCacheStrategy(DiskCacheStrategy.ALL); Glide.with(context).load(url).apply(options).into(imageView);四、在 RecyclerView 中使用
Glide 会自动处理 View 复用问题:
@Override public void onBindViewHolder(@NonNull ViewHolder holder, int position) { String url = items.get(position).getImageUrl(); Glide.with(holder.itemView.getContext()) // 绑定 itemView 生命周期 .load(url) .placeholder(R.drawable.placeholder) .into(holder.imageView); }注意:务必传入holder.itemView.getContext()或fragment,不要传ApplicationContext,否则生命周期无法自动管理。
五、在 MVVM 架构中的位置
在 MVVM 中,Glide 属于 View 层的职责:
ViewModel:只提供图片的 URL 或资源 ID,不持有 Context,也不调用 Glide。
Activity / Fragment / Adapter:负责调用
Glide.with(...)加载图片。DataBinding:可以通过
@BindingAdapter将 URL 直接绑定到ImageView,让 XML 更简洁。
DataBinding 绑定示例
public class ImageBindingAdapters { @BindingAdapter({"imageUrl", "placeholder"}) public static void loadImage(ImageView view, String url, Drawable placeholder) { Glide.with(view) .load(url) .placeholder(placeholder) .into(view); } }XML 中使用:
<ImageView android:layout_width="100dp" android:layout_height="100dp" app:imageUrl="@{item.imageUrl}" app:placeholder="@{@drawable/placeholder}" />六、 高级特性
| 特性 | 说明 |
|---|---|
| Generated API | 通过@GlideModule生成GlideApp,可自定义默认选项。 |
| Transformations | circleCrop()、roundedCorners()、blur()等。 |
| 自定义 Target | 加载到Bitmap、Drawable或自定义 View。 |
| 预加载 | Glide.with(context).load(url).preload() |
| 清除缓存 | Glide.get(context).clearMemory()/clearDiskCache() |
七、 Glide vs Coil vs Picasso
| 特性 | Glide | Coil | Picasso |
|---|---|---|---|
| 语言 | Java / Kotlin | Kotlin(协程) | Java / Kotlin |
| 体积 | 较大 | 轻量 | 较小 |
| GIF 支持 | 原生支持 | 需扩展 | 不支持 |
| 生命周期 | 自动 | 自动 | 手动 |
| 缓存 | 内存 + 磁盘 | 内存 + 磁盘 | 内存 + 磁盘 |
| 推荐场景 | 成熟稳定,Java 项目 | 新 Kotlin 项目,Compose | 简单图片加载 |
结论:Java 项目首选Glide;Kotlin 新项目可考虑Coil。