这个项目是什么

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