setContentView() 报 OutOfMemoryE
2016-05-17 本文已影响65人
wusp
这次的错误是在进行阿里云测Android云测的兼容性测试时发现的。错误日志为:
错误日志的意思是说在执行ActivitySplash的setContentView()方法时出现了内存不足的错误。
然后我去看了ActivitySplash的布局文件,在布局文件并没有引用加载任何的图片。
不过由于ActivitySplash是启动页,因此我们在ActivitySplash的Style文件中将一张图片设置为背景。
图片加载内存溢出的错误便来自于这里,而我看了下这张图片的大小,大概18K左右。
我做了一下搜索和研究,总的来说这个错误的解决方案大致分为3种.
1. 从图片本身入手:向设计师要更小的图片.
(1). 使用.jpg格式,png格式的图片会占据比.jpg图片更大的内存空间.
(2). 对图片进行压缩.
(3). 使用更小的尺寸(更少的像素值).
2. 不要在资源文件中进行图片加载,而使用ImageView,然后在Java代码进行动态加载.
主要原因是我们可以在Java代码中对图片加载进行优化。相关的加载图片优化方案网上很多,不再赘述了。
3. 申请更大的"heapSize".
通过在AndroidManifest.xml文件中<application>的标签下设置androiod:largeHeap="true"属性来为App申请更大堆内存。
但是使用这个方案时有几点需要注意:
(1). 使用在Android API 11 以上的机型中使用。
(2). 无法确定申请多大的内存,也就是,所请求的外加堆内存大小多少是由系统自动设置的。
(3). 有可能会影响手机其他App的运行: 因为手机需要结束其他同时正在运行的App的进程以便释放出RAM来提供给我们的App.
具体采用哪种方案,还需要结合自身的实际情况来决定。