我正在開發一個遊戲,它使用來自2000x2000 px圖像的位圖的活動。相同的應用程序在不同的Android設備上使用不同數量的內存
在我的HTC Hero中,當我運行該活動時,我正在使用12MB。
但是,如果我嘗試在任何具有16MB堆的模擬器中運行該應用程序,則虛擬機會因嘗試分配16,4 MB的OutOfMemoryError而崩潰;怎麼可能?
我也試過用其他模擬器,並得到20MB使用。
要測量我使用這個的內存量:
int usedMegs = (int) (Debug.getNativeHeapAllocatedSize()/1048576L);
String usedMegsString = String
.format(" - Memory Used: %d MB", usedMegs);
getWindow().setTitle(usedMegsString);
爲什麼在HTC Hero的相同的位圖需要12MB和20MB的其他設備?
編輯:我想出了它是密度的原因。 密度1 = 12MB,密度0.75 = 8MB和密度1.5 = 20MB(不完全,一些MB來自其他活動)
我可以說1.5密度設備使用1來解碼位圖?
編輯2:我把圖像放在/ drawable中,所以當我用1.5加載它時會變得更大。 如果我把圖像放在/ drawable-hdpi中,圖像需要更少的內存(12 MB),因爲它沒有縮放。
我的英雄是密度爲1的HVGA,這就是爲什麼。我正在嘗試使用WVGA模擬器。我不知道我是否可以在所有設備中將密度設置爲1,以便始終獲得12MB。 – Antonio 2011-03-20 11:01:09