使用Glide下载图片

    xiaoxiao2025-10-10  2

    Glide是Google官方推荐的图片加载库,既然是Google官方推荐,性能和效率自然不会差,这也是我平常会选择Glide作为首选图片加载库的原因。在实际开发中,有时候我们需要在预览图片的同时,还需要提供图片保存到本地功能,如果你项目使用的是Glide,那么结合Glide实现下载功能就轻而易举了,Glide会优先从缓存中查找图片资源,有缓存直接获取缓存图片,无缓存则从网络下载,简单高效。


    既然是图片下载,那么肯定是耗时操作,所以需要要使用到线程。既然是使用子线程去下载图片,那么我们怎么拿到下载成功或者失败的状态呢?当然是使用接口啦。
    一、我们先定义一个接口,代码很简单,就两个方法,成功或者失败的接口回调方法。
    public interface ImageDownLoadCallBack { void onDownLoadSuccess(File file); void onDownLoadFailed(); }
    二、实现自己的图片下载线程,一般实现线程的方法有两种,继承Thread和实现Runnable,这里我使用的是Runnable。
    public class DownLoadImageService implements Runnable { private String url; private Context context; private ImageDownLoadCallBack callBack; public DownLoadImageService(Context context, String url, ImageDownLoadCallBack callBack) { this.url = url; this.callBack = callBack; this.context = context; } @Override public void run() { File file = null; try { file = Glide.with(context) .load(url) .downloadOnly(Target.SIZE_ORIGINAL, Target.SIZE_ORIGINAL) .get(); } catch (Exception e) { e.printStackTrace(); } finally { if (file != null) { callBack.onDownLoadSuccess(file); } else { callBack.onDownLoadFailed(); } } } }

    小结: 代码很简单,调用Glide下载代码时需要try catch,所以我们的接口回调处理,一定要放在finally方法中,避免catch到异常,回调失败。

    三、如何高效的处理下载线程?请看代码
    /** * 单线程列队执行 */ private static ExecutorService singleExecutor = null; /** * 执行单线程列队执行 */ public void runOnQueue(Runnable runnable) { if (singleExecutor == null) { singleExecutor = Executors.newSingleThreadExecutor(); } singleExecutor.submit(runnable); } /** * 启动图片下载线程 */ private void onDownLoad() { DownLoadImageService service = new DownLoadImageService(this, "http://pic.sc.chinaz.com/files/pic/pic9/201508/apic14052.jpg", new ImageDownLoadCallBack() { @Override public void onDownLoadSuccess(File file) { // 在这里执行图片保存方法 } @Override public void onDownLoadFailed() { // 图片保存失败 } }); //启动图片下载线程 runOnQueue(service); }

    小结: 在实际开发中对于图片的下载,如果按普通的方法处理一般是new Thread(service).start去启用下载线程,但如果是我下载10张图片,每点一次下载就去new一个线程,系统不会实时去回收这些线程,这实际对内存的消耗很大,所以这里用到了线程池管理线程,线程池会对线程进行回收和复用,以更好的优化性能。

    文/馒头先生(简书作者) 原文链接:http://www.jianshu.com/p/c517ae7148f4 著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。
    转载请注明原文地址: https://ju.6miu.com/read-1302999.html
    最新回复(0)