您的位置:首页 > 其它

软引用下载图片

2014-04-22 14:29 330 查看
public class AsyncImageLoader {

private HashMap<String, SoftReference<Drawable>> imageCache;

public AsyncImageLoader() {
// 软引用
imageCache=new HashMap<String,SoftReference<Drawable>>();

}

/***
* 下载图片
* @param imageUrl   图片地址
* @param imageCallback   回调接口
* @return
*/
public Drawable loadDrawable(final String imageUrl,final ImageCallback imageCallback){
if (imageCache.containsKey(imageUrl)){
SoftReference<Drawable> softReference = imageCache.get(imageUrl);   //通过key获取软引用实例
Drawable drawable=softReference.get();  //获取软引用对象

if(drawable!=null){
return drawable;
}
}

//
final Handler handler=new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);

imageCallback.imageLoaded((Drawable) msg.obj, imageUrl);

}
};

// 开启线程下载图片
new Thread(){
public void run() {
Drawable drawable = loadImageFromUrl(imageUrl);
// 将下载的图片保存至缓存中
imageCache.put(imageUrl, new SoftReference<Drawable>(drawable));
Message message = handler.obtainMessage(0, drawable);
handler.sendMessage(message);
};
}.start();
return null;
}

//根据URL下载图片(这里要进行判断,先去本地sd中查找,没有则根据URL下载,有则返回该drawable)
protected Drawable loadImageFromUrl(String imageURL) {
Bitmap bitmap = MyUtil.GetBitmap(imageURL, 100);
Drawable drawable = new BitmapDrawable(bitmap);

return drawable;
}

// 回调接口
public interface ImageCallback {
public void imageLoaded(Drawable imageDrawable, String imageUrl);
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: