通用工具类-异步加载图片&缓存提取
2012-07-21 20:53
260 查看
public class AsyncImageLoader {
//SoftReference是软引用,是为了更好的为了系统回收变量
private HashMap<String, SoftReference<Drawable>> imageCache;
public AsyncImageLoader() {
imageCache = new HashMap<String, SoftReference<Drawable>>();
}
public Drawable loadDrawable(final String imageUrl,final ImageView imageView, final ImageCallback imageCallback){
if (imageCache.containsKey(imageUrl)) {
//从缓存中获取
SoftReference<Drawable> softReference = imageCache.get(imageUrl);
Drawable drawable = softReference.get();
if (drawable != null) {
return drawable;
}
}
final Handler handler = new Handler() {
public void handleMessage(Message message) {
imageCallback.imageLoaded((Drawable) message.obj, imageView,imageUrl);
}
};
//建立新一个新的线程下载图片
new Thread() {
@Override
public void run() {
Drawable drawable = null;
try {
drawable = ImageUtil.geRoundDrawableFromUrl(imageUrl, 20);
} catch (Exception e) {
e.printStackTrace();
}
imageCache.put(imageUrl, new SoftReference<Drawable>(drawable));
Message message = handler.obtainMessage(0, drawable);
handler.sendMessage(message);
}
}.start();
return null;
}
//回调接口
public interface ImageCallback {
public void imageLoaded(Drawable imageDrawable,ImageView imageView, String imageUrl);
}
}
//SoftReference是软引用,是为了更好的为了系统回收变量
private HashMap<String, SoftReference<Drawable>> imageCache;
public AsyncImageLoader() {
imageCache = new HashMap<String, SoftReference<Drawable>>();
}
public Drawable loadDrawable(final String imageUrl,final ImageView imageView, final ImageCallback imageCallback){
if (imageCache.containsKey(imageUrl)) {
//从缓存中获取
SoftReference<Drawable> softReference = imageCache.get(imageUrl);
Drawable drawable = softReference.get();
if (drawable != null) {
return drawable;
}
}
final Handler handler = new Handler() {
public void handleMessage(Message message) {
imageCallback.imageLoaded((Drawable) message.obj, imageView,imageUrl);
}
};
//建立新一个新的线程下载图片
new Thread() {
@Override
public void run() {
Drawable drawable = null;
try {
drawable = ImageUtil.geRoundDrawableFromUrl(imageUrl, 20);
} catch (Exception e) {
e.printStackTrace();
}
imageCache.put(imageUrl, new SoftReference<Drawable>(drawable));
Message message = handler.obtainMessage(0, drawable);
handler.sendMessage(message);
}
}.start();
return null;
}
//回调接口
public interface ImageCallback {
public void imageLoaded(Drawable imageDrawable,ImageView imageView, String imageUrl);
}
}
相关文章推荐
- Unity+NGUI打造网络图片异步加载与本地缓存工具类(一)
- 【Unity3D自学记录】打造网络图片异步加载与本地缓存工具类
- iOS网络编程(三) 异步加载及缓存图片---->SDWebImage
- Unity+NGUI打造网络图片异步加载与本地缓存工具类
- 【构建Android缓存模块】(三)Controller & 异步图片加载
- listView convertView缓存机制 & 异步加载图片 问题剖析
- iOS网络编程(三) 异步加载及缓存图片---->SDWebImage
- android异步加载图片显示,并且对图片进行缓存实例
- android-------用双缓存技术优化listview异步加载网络图片
- android ListView异步加载图片(双缓存)
- iOS异步加载缓存图片
- SDWebImage异步加载图片及缓存的管理与清理
- android listview分页异步加载图片及图片缓存
- Android ListView 图片异步加载和图片内存缓存
- wemall app商城源码Android之ListView异步加载网络图片(优化缓存机制)
- Listview异步加载缓存图片,解决快速滑动问题
- 使用Android新式LruCache缓存图片,基于线程池异步加载图片
- 图片异步加载和图片缓存的两种方式
- 异步加载图片,使用LruCache和SD卡或手机缓存,效果非常的流畅
- Android 异步加载图片,使用LruCache和SD卡或手机缓存,效果非常的流畅