我在imageView中使用大小为20-30kb的10 png图像,但是当此活动加载时,分配的内存从70mb增加到270mb。 那么为什么会为这些图像分配太多的内存。
这是内存分配的屏幕截图
这是我的一张照片
答案 0 :(得分:2)
文件大小并不重要。不,你的图像是20kb,但它的分辨率非常大。当图像加载到内存中时,它占用的内存等于totalNoOfDotsInImageBitmap * 4bytes 和totalNoOfDotsInImageBitmap = width *图像的高度。
4个字节 - 因为ARBG(每个参数1个字节)用于位图的单个点
因此减少图像的宽度和高度可以解决您的问题。
答案 1 :(得分:0)
根据您放置资产的位置,可能会尝试加载过大的文件。
例如,如果您在drawable
或nodpi-drawable
上使用,则密度较低的设备会尝试加载可能较大的图像。
另外,请记住,实际文件大小并不重要,因为压缩可能很小,但是在绘制图像时必须将图像转换为位图,所以如果实际尺寸太大,可以也导致OOM。
如果您可以访问原始版本,我建议使用矢量drawable(它是一个简单的形状,所以应该没问题),AS将为旧版本生成所需的PNG文件。