线程池+缓存+Handler 异步加载网络图片
发布时间:2020-05-24 14:12:34 所属栏目:Java 来源:互联网
导读:线程池+缓存+Handler 异步加载网络图片
|
下面是脚本之家 jb51.cc 通过网络收集整理的代码片段。 脚本之家小编现在分享给大家,也给大家做个参考。 import java.lang.ref.SoftReference;
import java.net.URL;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import android.graphics.drawable.Drawable;
import android.os.Handler;
import android.util.Log;
/**
* 线程池+缓存+Handler加载图片
*/
public class AsyncLoadImage {
//缓存
private Map<String,SoftReference<Drawable>> imageCache = new HashMap<String,SoftReference<Drawable>>();
//线程池
private ExecutorService executorService = Executors.newFixedThreadPool(20);//总共有10个线程循环使用
//Hanlder
private Handler mHandler = new Handler();
public interface ImageCallback {
void imageLoad(Drawable image,String imageUrl);
}
/**
*
* @param imageUrl 图片的地址
* @param imageCallback 回调接口
* @return 返回内存中缓存的图像 第一次返回null
*/
public Drawable loadDrawable(final String imageUrl,final ImageCallback imageCallback) {
Log.i("AsyncLoadImage","loadDrawable()" + imageUrl);
//如果缓存中有则从缓存中取出来
if(imageCache.containsKey(imageUrl)) {
SoftReference<Drawable> softReference = imageCache.get(imageUrl);
if(softReference.get() != null) { //判断是否有drawable
return softReference.get(); //有则返回
}
}
//使用线程池下载图片
executorService.submit(new Runnable() {
@Override
public void run() {
try {
// final Drawable drawable = Drawable.createFromStream(new URL(imageUrl).openStream(),"image.jpg");
final Drawable drawable = getDrawableFormUrl(imageUrl); //调用获取数据的方法
imageCache.put(imageUrl,new SoftReference<Drawable>(drawable));//将加载的图片放入到内存中
mHandler.post(new Runnable() {
@Override
public void run() {
imageCallback.imageLoad(drawable,imageUrl); //接口回调
}
});
} catch (Exception e) {
throw new RuntimeException();
}
}
});
return null ;
}
/**
* 从网络上获取数据
*/
public Drawable getDrawableFormUrl(String imageUrl) {
Drawable drawable = null ;
try {
drawable = Drawable.createFromStream(new URL(imageUrl).openStream(),"image.jpg");
} catch (Exception e) {
throw new RuntimeException();
}
return drawable ;
}
}
以上是脚本之家(jb51.cc)为你收集整理的全部代码内容,希望文章能够帮你解决所遇到的程序开发问题。 如果觉得脚本之家网站内容还不错,欢迎将脚本之家网站推荐给程序员好友。 (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
