import java.lang.ref.SoftReference;
import java.util.HashMap;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.os.Handler;
import android.os.Message;
import android.widget.ImageView;
/**
* 实现异步加载本地图片,防止oom错误
*
* @author su
*
*/
public class AsyncImageLoader {
public Context mcontext;
private HashMap<String, SoftReference<Drawable>> imageCache;
public AsyncImageLoader(Context context) {
this.mcontext = context;
imageCache = new HashMap<String, SoftReference<Drawable>>();
}
/**
*
* @param imageUri
* 图片路徑
* @param imageView
* 显示图片的imageview
* @param imageCallback
* 实现callback 比较固定
* @return
*/
private Drawable loadDrawable(final String uri, final ImageView imageView,
final ImageCallback imageCallback) {
if (imageCache.containsKey(uri)) {
// 从缓存中获取
SoftReference<Drawable> softReference = imageCache.get(uri);
Drawable drawable = softReference.get();
if (drawable != null) {
return drawable;
}
}
final Handler handler = new Handler() {
public void handleMessage(Message msg) {
imageCallback.imageLoaded((Drawable) msg.obj, imageView, uri);
}
};
new Thread() {
public void run() {
Drawable drawable = null;
drawable = getDrawableFromFile(uri);
imageCache.put(uri, new SoftReference<Drawable>(drawable));
Message msg = handler.obtainMessage(0, drawable);
handler.sendMessage(msg);
}
}.start();
return null;
}
// 回调接口
public interface ImageCallback {
public void imageLoaded(Drawable imageDrawable, ImageView imageView,
String uri);
}
// 从本地读取图
private Drawable getDrawableFromFile(String uri) {
Bitmap bitmap = BitmapFactory.decodeFile(uri);
Drawable drawable = new BitmapDrawable(bitmap);
return drawable;
}
/**
* 设置imageview的bitmap
* @param uri 圖片路徑
* @param imageView
*/
public void setAsyDrawable(String uri, ImageView imageView) {// 使用软引用获取用于显示图片的drawable
Drawable asyndrawable = loadDrawable(uri, imageView,
new ImageCallback() {
public void imageLoaded(Drawable imageDrawable,
ImageView imageView, String imageUrl) {
imageView.setImageDrawable(imageDrawable);
}
});
}
}
分享到:
相关推荐
安卓在加载大图的时候经常会出现oom的错误,给大家分享我的一些处理经验。
Android解决图片加载OOM与listview图片错位乱跳问题解决,开源的代码,里面有示例demo
Android 异步加载图片缓存优化能异步加载图片,并缓存到本地,采用一级缓存,二级缓存和本地缓存,避免oom异常。源码中有详细注释,资料中有jar包,可以直接复制到项目中使用。
安卓网络异步获取图片,存放本地,加载到imageview不会OOM 使用方法如下: //高清4K String url="http://attach.bbs.miui.com/forum/201502/03/150905vpzrbnzksnkbkyhr.jpg"; YnetImg yset=new YnetImg...
Android高级应用源码-加载本地图片,绝对不会出现OOM.zip
防止下载图片的过程中产生OOM,当滚动的过程中停止下载!
一个很好用并且使用方法很简单的图片加载插件.自动加载和自动释放内存.完美解决大批量图片加载容易内存溢出的问题.里面有官方demo.据不可靠消息.京东和天猫都使用了该插件.
listview 异步动态加载网络图片 有效解决oom问题 讲这个工具类拷贝到你工程中。 调用方法很简单: ImageLoader imageLoader = new ImageLoader(context); imageLoader.DisplayImage(imageUrl, imageView);
加载本地图片,绝对不会出现OOM
有效控制了Android大图片、多图片加载的OOM异常。
android 异步加载网络图片,防止oom,代码可以参考
加载大图片到内存时如何防止 OOM的产生
imageloader加载本地图片,利用线程池,缓存,LIFO,防止大量图片加载导致OOM(代码中加有注释理解).rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
安卓源码包android图片缓存&展示Android 异步加载图片等24个合集: ‘360全景查看demo.rar afinal框架实现图片的简单异步缓存加载.rar andengine中直接加载多张小图片合成一张大图片生成动画精灵.rar android gif...
这个可以实现ImageView异步加载图片,内存缓存,文件缓存,imageview显示图片时增加淡入淡出动画。解决了:1. listview加载oom问题 2. listview加载时卡顿的现象 3. listview加载时item中图片重复错位等情况 可以...
甚至还可以从各种各样奇葩的数据源中加载图片。 加载网络图片 很多情况下,我们使用图片加载库就是为了加载网络图片。网络操作是一个很复杂的东西。试想一下,如果没有图片加载库,我们就要手动去下载图片,缓存图片...
很久没上传资源了,今天特意把自己收集的,自己用过的资源上传。Android 异步加载网络的图片,开始的时候显示默认的,当加载完成图片后替换掉原来的默认图片,绝对不会发生内存溢出的问题。
SD卡,本地资源,网络图片的加载,使用缓存机制,防止OOM
android加载大图避免oom,博客http://blog.csdn.net/u012305710/article/details/51079676
android 图片下载 防止OOM