最近在写程序的时候图片加载老是报出内存溢出的错误,表示很是头痛。网上找了些文章看了看。今天就大致的总结下。可以先去看下这篇文章 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);
}
}
如果你有更好的经验,请分享
本文介绍了一种使用软引用缓存和图片处理技术来避免Android应用中因图片加载引起的内存溢出(OutOfMemory)问题的方法。通过在自定义适配器中实现图片缓存和释放机制,有效地减少了内存占用。
409

被折叠的 条评论
为什么被折叠?



