Android:使用png而不是矢量图像时分配的内存太多

时间:2017-06-20 12:56:32

标签: android performance out-of-memory

我在imageView中使用大小为20-30kb的10 png图像,但是当此活动加载时,分配的内存从70mb增加到270mb。 那么为什么会为这些图像分配太多的内存。

这是内存分配的屏幕截图

enter image description here

这是我的一张照片

enter image description here

2 个答案:

答案 0 :(得分:2)

文件大小并不重要。不,你的图像是20kb,但它的分辨率非常大。当图像加载到内存中时,它占用的内存等于totalNoOfDotsInImageBitmap * 4bytes 和totalNoOfDotsInImageBitmap = width *图像的高度。

4个字节 - 因为ARBG(每个参数1个字节)用于位图的单个点

因此减少图像的宽度和高度可以解决您的问题。

答案 1 :(得分:0)

根据您放置资产的位置,可能会尝试加载过大的文件。

例如,如果您在drawablenodpi-drawable上使用,则密度较低的设备会尝试加载可能较大的图像。

另外,请记住,实际文件大小并不重要,因为压缩可能很小,但是在绘制图像时必须将图像转换为位图,所以如果实际尺寸太大,可以也导致OOM。

如果您可以访问原始版本,我建议使用矢量drawable(它是一个简单的形状,所以应该没问题),AS将为旧版本生成所需的PNG文件。