最近在写程序的时候图片加载老是报出内存溢出的错误,表示很是头痛。网上找了些文章看了看。今天就大致的总结下。可以先去看下这篇文章 http://www.2cto.com/kf/201208/148379.html 很是详细。
大致就用到了java 软引用的概念,图片处理,java回收机制三种方法合力解决了OOM的问题。随然知道了方法但在调试的时候还是费了不少时间。
我加载图片的代码大多数都是在自定义的适配器中,所以我选择把内存处理的方法写在运用适配器的activity中,首先先去加载图片代码如下:
private Bitmap loadBitmapImage(String path) {
if (mImageCache.containsKey(path)) {
SoftReference<Bitmap> softReference = mImageCache.get(path);
Bitmap bitmap = softReference.get();
if (null != bitmap)
return bitmap;
}
Bitmap bitmap = Options.CreatBitMap(path);
mImageCache.put(path, new SoftReference<Bitmap>(bitmap));
return bitmap;
}
可以看出在每次加载图片的时候都会将图片存入一个软引用的缓存数组中,这样做的好处就是,每当你重复调用的时候都会先去这个数组中判断是否有该图片的存在,如果存在就不用去重新读取了,重新引用就好.
然后就是图片释放的问题,首先你要考虑清楚的问题是,图片在什么时候释放,如果方法写错了地方也是不对的这里我写在了onDestroy()方法中
public void releaseImage(String path) {
if (mImageCache.containsKey(path)) {
SoftReference<Bitmap> reference = mImageCache.get(path);
Bitmap bitmap = reference.get();
if (null != bitmap) {
bitmap.recycle();
}
mImageCache.remove(path);
}
}
如果你有更好的经验,请分享