Glide v4 图片加载)
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:nameandroid.permission.INTERNET/二、基本用法JavaGlide.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. 自定义 RequestOptionsRequestOptions 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_width100dp android:layout_height100dp app:imageUrl{item.imageUrl} app:placeholder{drawable/placeholder} /六、 高级特性特性说明Generated API通过GlideModule生成GlideApp可自定义默认选项。TransformationscircleCrop()、roundedCorners()、blur()等。自定义 Target加载到Bitmap、Drawable或自定义 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 项目首选GlideKotlin 新项目可考虑Coil。