Bitmap OutOfMemoryError

在创建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()调用一下系统的垃圾回收器。


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

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



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值