我一直在监控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);
答案 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