anroid 内存溢出 Bitmap OutOfMemoryError

Bitmap OutOfMemoryError

2014年06月09日 09:55:28 阅读数:2434 标签: OutOfMemoryErrorBitmap回收 更多

个人分类: 异常问题和解决办法

在创建Bitmap的时候由于对象过多而没有即使回收,导致的内存不足:

java.lang.OutOfMemoryError
E/AndroidRuntime(21898):     at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method)
E/AndroidRuntime(21898):     at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:500)
E/AndroidRuntime(21898):     at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:353)
E/AndroidRuntime(21898):     at android.graphics.BitmapFactory.decodeResource(BitmapFactory.java:376)
E/AndroidRuntime(21898):     at android.graphics.BitmapFactory.decodeResource(BitmapFactory.java:406)

 

解决办法:

方法一:减小图片大小

BitmapFactory.Options opts = new BitmapFactory.Options();  

opts.inSampleSize = n;  

bitmap = BitmapFactory.decodeStream(fis, null, opts);

opts.inSampleSize的默认值是0 ,设置其值可以压缩图片以减小OOM几率,这种方法可以缓解问题但是不能彻底解决问题,当某时bitmap对象超过阀值时还是回报错。

方法二:及时回收bitmap内存:

if(bitmap != null && !bitmap.isRecycled()){   
        bitmap.recycle();   
        bitmap = null;   
}   
System.gc();  


bitmap.recycle()方法用于回收该bitmap所占用的内存,接着将bitmap置空,最后,用System.gc()调用一下系统的垃圾回收器。

方法三: 自然是优化代码结构

好的代码结构和代码风格是程序员毕生追求...!

猜你喜欢

转载自blog.csdn.net/qq_27327261/article/details/82013143
今日推荐