2011-10-12 53 views
0

我在我的應用程序中使用了皮膚,並在某些活動中加載了類似1.5 Mb的圖像。 這不應該是一個問題.... 1.5 Mb +默認爲〜6Mb的應用程序時加載...但是,事情是完全不同的。 每個PNG我加載作爲我的佈局xmls中可繪製的,從其實際大小乘以至少10 ... ....我寫了一個示例應用程序,除了黑色屏幕,沒有任何東西,並沒有任何東西加載它一次並得到5.8Mb的本地堆,然後加載一個25Kb的小PNG,並猜測什麼.... 6.25Mb。 我裝了我的應用程序,只有皮膚,它開始於14.5Mb !!!!!!!!皮膚我的應用程序在本地堆中消耗大量的Mb(更多圖像的實際大小)

所以現在我正在做一個位圖回收操作,在每一個活動改變之後。

這是android的一個已知問題嗎? png文件在本地堆內加載了更大的尺寸? 是否有解決方案,而不是我目前的計劃?

謝謝。

回答

0

PNG文件(以及許多其他圖像格式,如JPEG)是壓縮文件,與zip文件非常相似。當你將它們加載到內存中時,它們將被解壓縮,因此需要更多的空間。

有多少取決於內部的image config,默認值是ARGB8888,每個像素需要4個字節。因此,內存消耗僅取決於圖像大小,而不取決於磁盤上的文件大小(可能會非常小,例如:由一種顏色組成的500x500 px位圖具有良好的壓縮比)

500x500像素圖像的示例爲500*500*4 bytes = 0.954 MB,這幾乎是1兆字節。

+0

所以我唯一沒有得到內存不足的解決方案是在恢復和暫停活動時加載和回收每個大的PNG? – iAndroid

+0

除了降低尺寸外,還有很多。您也可以使用ndk在本機代碼中加載位圖,這會繞過內存限制。但是我沒有經驗,嘗試了一下Google搜索。此外,請嘗試搜索[android outofmemory exception](http://stackoverflow.com/search?q=%5Bandroid%5D+bitmap+outofmemory+exception),這種異常通常發生在人們嘗試使用位圖分配太多內存時充分記錄(用所有可能的解決方案來減少內存佔用)。 – 2011-10-12 10:14:18

+0

在過去的2天我一直在尋找內存異常....我想我知道這一切直到現在的心.... :)這就是我想通了我必須回收...認爲可能有一個更好的解決方案,而不降低圖像分辨率(吃蛋糕和....)。謝謝! – iAndroid

相關問題