码迷,mamicode.com
首页 > 其他好文 > 详细

关于解决Activity设置图片背景和ImageView设置帧动画引发的OOM的解决

时间:2015-01-19 18:38:43      阅读:109      评论:0      收藏:0      [点我收藏+]

标签:

近期在工作中,由于Activity的背景图片均为1280 * 720大小的,引发了一系列的OOM问题。做了一些处理,心得如下:

1.首先为什么会出现OOM呢。对于一张1280 * 720的图片,它应该占多大的内存呢?

一张图片(bitmap)占用的内存大小大概等于图片的长度 * 图片的宽度(像素)* 单位像素所占用的字节数。而单位像素所占用的字节数,官网文档如下:

技术分享

2.那么应该如何解决该问题呢?

首先出现OOM的原因是相应的Activity使用完该背景图片后,并没有释放掉对该图片的引用,系统并不可以去回收该图片资源,因此首先想到了手动的在该 Activity销毁的时候setBackgroundResource为0(相当于remove掉该背景),但是后期发现这样做的效果并不明显,GC并没有及时的回收掉资源。又重新查资料,想到每次销毁的时候都去获取到背景的bitmap,手动的recycle一下。代码如下:

技术分享

这样解决以后,OOM的问题得到了很大程度上的解决,但是同时又出现了另一个问题:

技术分享

那为什么出现该问题呢?
3.为什么出现trying to use a recycled bitmap 的异常
因为我们在recycle时有可能该Activity还在使用该背景图片,因此引起了该异常。那么应该如何解决呢,我的大概想法是,在recycle之前,先将Activity和背景图片的引用关系解开再去recycle图片。如下:

技术分享

大致可以解决掉以上问题。以上即为我解决掉这个bug的一些分享。大家如果有更好的解决办法,请告知我一声,谢啦。

对于帧动画,解决方法类似,代码如下:

技术分享

 

如有错误。请及时指出,谢谢。

关于解决Activity设置图片背景和ImageView设置帧动画引发的OOM的解决

标签:

原文地址:http://www.cnblogs.com/mandy920213/p/4234296.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!