Android遇到内存溢出(Out Of Memory)BUG的经验与解决方法


突然出现的Out Of Memory这个BUG导致我们项目中断了好几天,在经过不断地摸索之后,今天终于得到了解决。鉴于其强大的破坏力与多发性(尤其是当开发图形丰富的软件时),在此将解决方法同大家分享,希望大家以后少走弯路,而本人水平有限,如有不当,还望指教! 

那么,首先让我们来看看遇到这个BUG时系统输出的Log:

 

 

 

 

 

 

 

 

 

 

 

 

按我们的经验一行一行地分析,发现了报错的原因:bitmap size exceeds VM budget,

中文意思是bitmap占用的内存大小超过了虚拟机(DVM)的允许值。

带着这个信息,我去问谷哥和度娘,果然有大把大把的人遇到了这个问题,有的人还长久以来身陷其中,难以自拔~~

而解决方案则是五花八门,但是有的网友却反映这些网上通用的解决方案完全没作用!?

我并没有尝试所有网上的解决方法,在尝试了部分之后确实没有起到多少作用,该出BUG的地方照出不误,

搞得我甚至有点怀疑这是Google的一个设计缺陷。

经过信息检索,我弄清了这样一个事实:Android虚拟机不允许单个程序中的Bitmap占用超过8M的内存,一旦超过了就会报错,

而报的错正是bitmap size exceeds VM budget.

现在好了,这一切看似如此简单:要想程序的bitmap小于8M,要么就在用了bitmap后立即回收这部分内存,要么就压缩图片的大小啊。

依据这两点思路,我在我的项目中进行了实践。

(一般而言,只用这两种方法就可以解决大部分Out Of Memory的BUG,如果还不能解决,请继续往下看)

  • 1
  • 2
  • 下一页

相关内容