您的位置:首页 > 其它

使用Glide下载图片

2016-08-15 15:24 441 查看
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

著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: