Android |(十二)Glide v4 图片加载
2026/9/17 11:51:15 网站建设 项目流程

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); // 目标 ImageView

with()可以传入:

  • 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,可自定义默认选项。
TransformationscircleCrop()roundedCorners()blur()等。
自定义 Target加载到BitmapDrawable或自定义 View。
预加载Glide.with(context).load(url).preload()
清除缓存Glide.get(context).clearMemory()/clearDiskCache()

七、 Glide vs Coil vs Picasso

特性GlideCoilPicasso
语言Java / KotlinKotlin(协程)Java / Kotlin
体积较大轻量较小
GIF 支持原生支持需扩展不支持
生命周期自动自动手动
缓存内存 + 磁盘内存 + 磁盘内存 + 磁盘
推荐场景成熟稳定,Java 项目新 Kotlin 项目,Compose简单图片加载

结论:Java 项目首选Glide;Kotlin 新项目可考虑Coil

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询