2011-10-12 55 views
0

我在我的应用程序中使用了皮肤,并在某些活动中加载了类似1.5 Mb的图像。 这不应该是一个问题.... 1.5 Mb +默认为〜6Mb的应用程序时加载...但是,事情是完全不同的。 每个PNG我加载作为我的布局xmls中可绘制的,从其实际大小乘以至少10 ... ....我写了一个示例应用程序,除了黑色屏幕,没有任何东西,并没有任何东西加载它一次并得到5.8Mb的本地堆,然后加载一个25Kb的小PNG,并猜测什么.... 6.25Mb。 我装了我的应用程序,只有皮肤,它开始于14.5Mb !!!!!!!!皮肤我的应用程序在本地堆中消耗大量的Mb(更多图像的实际大小)

所以现在我正在做一个位图回收操作,在每一个活动改变之后。

这是android的一个已知问题吗? png文件在本地堆内加载了更大的尺寸? 是否有解决方案,而不是我目前的计划?

谢谢。

回答

0

PNG文件(以及许多其他图像格式,如JPEG)是压缩文件,与zip文件非常相似。当你将它们加载到内存中时,它们将被解压缩,因此需要更多的空间。

有多少取决于内部的image config,默认值是ARGB8888,每个像素需要4个字节。因此,内存消耗仅取决于图像大小,而不取决于磁盘上的文件大小(可能会非常小,例如:由一种颜色组成的500x500 px位图具有良好的压缩比)

500x500像素图像的示例为500*500*4 bytes = 0.954 MB,这几乎是1兆字节。

+0

所以我唯一没有得到内存不足的解决方案是在恢复和暂停活动时加载和回收每个大的PNG? – iAndroid

+0

除了降低尺寸外,还有很多。您也可以使用ndk在本机代码中加载位图,这会绕过内存限制。但是我没有经验,尝试了一下Google搜索。此外,请尝试搜索[android outofmemory exception](http://stackoverflow.com/search?q=%5Bandroid%5D+bitmap+outofmemory+exception),这种异常通常发生在人们尝试使用位图分配太多内存时充分记录(用所有可能的解决方案来减少内存占用)。 – 2011-10-12 10:14:18

+0

在过去的2天我一直在寻找内存异常....我想我知道这一切直到现在的心.... :)这就是我想通了我必须回收...认为可能有一个更好的解决方案,而不降低图像分辨率(吃蛋糕和....)。谢谢! – iAndroid

相关问题