2011-03-20 47 views
2

我正在開發一個遊戲,它使用來自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),因爲它沒有縮放。

回答

2

你是如何將你的位圖加載到內存中的?這只是我的猜測,但也許HTC設備使用24位色彩空間加載位圖,而其他設備使用32位色彩空間。每像素24位的2000x2000位圖將使用大約12 MB的內存,而每像素32位的相同位圖則需要更接近16 MB或內存。

+0

我的英雄是密度爲1的HVGA,這就是爲什麼。我正在嘗試使用WVGA模擬器。我不知道我是否可以在所有設備中將密度設置爲1,以便始終獲得12MB。 – Antonio 2011-03-20 11:01:09

相關問題