`
yidongkaifa
  • 浏览: 4063454 次
文章分类
社区版块
存档分类
最新评论

android一种引发内存溢出的原因和一种对应的解决方式

 
阅读更多

新的版本上线了,第二天就看到了反馈回来的错误,比较多的一个错误是java.lang.OutOfMemoryError: bitmap size exceeds VM budget,对于这样的菜鸟看这个问题去修改那是不可能滴,我就看着老大去怎么修改的。内存溢出一般是因为太多的图片引起的,他就在思考图片加载和清理的问题,想到了pad版本都没有出现过类似的问题,为什么手机版就出现了呢。大概的看了一下pad版本的代码,突然想到了页面跳转之后忘了对图片的缓存进行回收,在代码中加上

	@Override
	public void onDestroy() {
		super.onDestroy();
		if(checkImage != null) {
			checkImage.clearBitmap();
		}
	}
问题就得了解决,checkImage变量是用于处理图片加载的问题。我们的客户端对需要使用很多图片,图片在程序中的处理方式是第一步首先检查内存中是否存在加载的图片,第二步如果没有就检查本地(SD卡)中有没有存储的图片,最后才是到服务器端进行请求。系统本身会对内存进行相应的处理,但是因为图片加载的比较多比较频繁,如果不进行手动清理,也是容易出现内存溢出的问题的。

clearBitmap函数:

	public void clearBitmap() {
		if(hm != null) {
			try {
				Iterator<Map.Entry<String, Bitmap>> it = hm.entrySet().iterator();
				while(it.hasNext()) {
					Map.Entry<String, Bitmap> entry = it.next();
					Bitmap bm = entry.getValue();
					bm.recycle();
					bm = null;
				}
				hm.clear();
			}catch (Exception e) {
			}
		}		
	}

另外遇到的一个问题就是一些空指针的错误Caused by: java.lang.NullPointerException,这个问题出现的频率也是比较大的一个,但是这个问题又不是自己 能够解决的,属于偶发性错误,对于这样的错误,我们要做的只是保证客户端不崩溃就行了,所以找到错误对应的行,查看空指针大概出现的位置,然后使用try catch捕获就行了,不需要进行别的任何的处理就行了。因为这个错误不会影响到下单和查看客户端的一些重要的信息。




分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics