这个项目是什么
GlideUtils 是对 Glide 图片加载库的一层 Java 封装。项目里加载图片的代码翻来覆去就是那几种:普通图片、GIF、需要占位图和错误图的图片,各自还要配监听器处理成功和失败。这个类把这些调用收敛成静态方法,调用方少写一堆样板代码。
README 里特别强调的一点是:占位符不会覆盖 CircleImageView。用 Glide 给圆形头像加占位图时,方形的占位图会盖住圆形裁剪,这是早期项目里很常见的一个坑,封装层把这个问题处理掉了。
封装了什么
- 普通图片:
loadImage(url, imageView)一行即可,需要传入上下文、占位图和错误图时用参数更长的重载。 - 动图与静态图:分别有加载入口,都可以挂
ImageLoadListener,在onLoadingComplete和onLoadingError里收尾,比如隐藏进度条、切换到失败布局。 - 直接取资源:README 提到除了把图片加载到 View,也可以获取
Bitmap或Drawable。 - 内存清理:
clearMemory用于页面销毁时释放占用的内存。
使用方法
普通加载图片,支持 CircleImageView:
GlideUtils.loadImage(url, imageview);
//GlideUtils.loadImage(this, url, imageview, null);
需要占位图和错误图时,在参数后面补上:
GlideUtils.loadImage(this, url, imageview, null, R.drawable.default_article_image, R.drawable.default_article_image);
加载 Gif,带监听:
GlideUtils.loadImageGif(mImageUrl, mImageView, new GlideUtils.ImageLoadListener<String, GifDrawable>() {
@Override
public void onLoadingComplete(String uri, ImageView view, GifDrawable resource) {
progressBar.setVisibility(View.GONE);
}
@Override
public void onLoadingError(String source, Exception e) {
LogUtil.e("im查看图片加载失败:" + e);
mEntry.setIsDownload(false);
progressBar.setVisibility(View.GONE);
mFailLayout.setVisibility(View.VISIBLE);
}
});
加载静态图片:
GlideUtils.loadImage(this, mImageUrl, mImageView, new GlideUtils.ImageLoadListener<String, GlideDrawable>() {
@Override
public void onLoadingComplete(String uri, ImageView view, GlideDrawable resource) {
progressBar.setVisibility(View.GONE);
mEntry.setIsDownload(true);
}
@Override
public void onLoadingError(String source, Exception e) {
LogUtil.e("im查看图片加载失败:" + e + "连接:" + source);
mEntry.setIsDownload(false);
progressBar.setVisibility(View.GONE);
mFailLayout.setVisibility(View.VISIBLE);
}
});
不需要监听时,把监听参数传 null 即可。
踩坑与思考
README 用加粗标出了最重要的一条:多图界面在 onDestroy 里要调用 GlideUtils.clearMemory(this),示例后面还跟了一句 System.gc()。
手动触发 GC 在今天不算推荐做法,垃圾回收什么时候跑应该交给系统;但在当年的内存环境下,它常被当作兜底手段。如果现在还要用这个类,建议保留 clearMemory,把 System.gc() 去掉,避免每次退出页面都触发一次全局 GC 影响流畅度。
另外,示例里用的是 GlideDrawable 和 GifDrawable 这两个类型,属于 Glide 3 时代的 API。如果项目已经升级到 Glide 4,类型和加载接口都变了,这部分需要跟着调整。
仓库地址:tpnet/GlideUtils