天天看点

setContentView() 报 OutOfMemoryError的错误

这次的错误是在进行阿里云测Android云测的兼容性测试时发现的。错误日志为:

setContentView() 报 OutOfMemoryError的错误

错误日志的意思是说在执行ActivitySplash的setContentView()方法时出现了内存不足的错误。

然后我去看了ActivitySplash的布局文件,在布局文件并没有引用加载任何的图片。

不过由于ActivitySplash是启动页,因此我们在ActivitySplash的Style文件中将一张图片设置为背景。

setContentView() 报 OutOfMemoryError的错误

图片加载内存溢出的错误便来自于这里,而我看了下这张图片的大小,大概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.

具体采用哪种方案,大家还需要结合自身的实际情况来决定。