2017-09-13 57 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的圖像預縮放造成的