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);
}
}
软引用下载图片
最新推荐文章于 2024-06-01 00:03:55 发布