软引用下载图片

来源:互联网 发布:youtube出现网络问题 编辑:程序博客网 时间:2024/04/29 21:01
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(){@Overridepublic 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); } }

0 0