2017-09-13 58 views
0

我一直在监视Android应用程序中的内存消耗,并注意到一个有趣的现象。在加载位图(一个PNG文件,380x10640)时,我观察到在某些设备(例如Modecom FreeTab 9004,API 17)上执行加载位图的代码减少15 MB后可用的内存量以及多达60另一个是MB(即Nexus4 API 25)。任何人都可以解释为什么会发生这种情况吗?BitmapFactory和关于内存消耗的不同值

我用Runtime.getRuntime().freeMemory()来监视堆,以及下面的命令来加载位图。

Resources r = getResources(); 

private Bitmap imageOne; 

// ... 

imageOne = BitmapFactory.decodeResource(r, R.drawable.bitmap_1); 

回答

0

内存消耗的差异应该是由于不同的设备默认位图配置。
例如,如果默认值为RGBA_F16,则每个像素占用8个字节,即ARGB_8888-4个字节。所以,如果你计算:

380 * 10640 = 4043200 pixels * 8 bytes = 32345600 byte ~32 mb. 

至于60 MB,而不是32 - 图像可能会被缓存,缓存,或者你不期而遇加载它的两倍。

您可以手动加载图像。这样你可以选择它的配置。

UPDATE1: 或60 mb vs 15 mb可能是由不同DPI的图像预缩放造成的