BitmapFactory和有关内存消耗的不同值

时间:2017-09-13 10:39:01

标签: android memory bitmap bitmapfactory

我一直在监控Android应用程序中的内存消耗,并注意到一个有趣的现象。当加载位图(PNG文件,380x10640)时,我观察到在某些设备(例如,Modecom FreeTab 9004,API 17)上执行加载位图的代码减少了15 MB后,可用的内存量可达60另一方面是MB(即Nexus4 API 25)。谁能解释一下为什么会发生这种情况?

我使用Runtime.getRuntime().freeMemory()监视堆,并使用以下命令加载位图。

Resources r = getResources();

private Bitmap imageOne;

// ...

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

1 个答案:

答案 0 :(得分: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