加载本地大图后Bitmap oom的处理

在做拍照上传图片后发现 使用bitmap显示缩略图应用很容易就oom了这不是一个很好的现象

这原因之一就是安卓或者说java的内存回收机制导致的解决这一问题的唯一办法就是手动将bitmap占用的内存空间给回收了查阅谷歌官方文档后

发现Bitmap 的内存自动回收机制不是那么理想,往往要自己处理(这也是官方文档的建议),但我们要注意以下几点

已经没用的 bitmap 对象要及时调用 recycle() 释放空间并将对象置为null 然后手动回收内存 System.gc();

另外Activity中的Bitmap对象,如果是成员变量,需要在onDestroy()中明确释放。

因为,即使在Activity调用Finish()结束后,虚拟机都不会立即回收Bitmap的内存(什么时候回收不得 而知),所以如一个Activity 中会创建一个很大的Bitmap,在Activiy结束后没有明确释放,多次调用 这个Activity后,容易发生内存溢出错误。

private void gcBitmap(Bitmap bitmap){
		if (null != bitmap) {
			bitmap.recycle();
			bitmap=null;
			System.gc();
		}
	}
	@Override
	protected void onDestroy() {
		super.onDestroy();
		gcBitmap(bitmap);
		gcBitmap(ratioBitmap);
	}


 上面是我在我应用中的部分代码

使用bitmap前要调用gcBitmap(bitmap)方法手动先回收一下内存同时在onDestroy()方法中也要将bitmap所用的内存空间回收防止多次调用后内存溢出


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值