2012-02-17 38 views
2

我正在研究需要顯示4個大位圖(6 x屏幕大小)的Android應用程序。在開始時,我遇到了問題,但通過對整個設備上的內存管理進行代碼優化。但在4.0.3 Android版本的華碩Transformer Prime中,我有OutOfMemory錯誤。這很奇怪,因爲堆大小似乎是256Mb。很多與其正確運行的其他設備相比。爲什麼華碩Transformer Prime是唯一具有OutOfMemory異常的設備

我們已經激活大堆並禁用了硬件加速。

您是否瞭解我們的問題?

回答

2

您的屏幕是1280x800,因此屏幕大小的32bpp位圖將需要略低於4MB,並且6 x屏幕大小的位圖將需要23.5MB。而你想要其中的四個......這是93.75MB。

進程堆棧限制因設備而異,但我認爲64MB很多(也許我落後於時代)。 256MB是巨大的!

恕我直言,你不應該試圖在內存中保持如此巨大的位圖。你最好將它們分解成不大於屏幕的瓷磚,並根據需要加載瓷磚。

或者,嘗試使用16bpp圖像或爲JNI中的大量位圖分配空間(即在C中)並完全繞過Java堆管理。

+0

我們不需要6個屏幕高度的位圖,但只有一個。其他人較小。這4個位圖必須同時加載,因爲它們之間顯示並動畫。非常好奇,在PRIME上類似(分辨率,大小)的設備上不會生成異常,但堆大小內存較少。 – 2012-02-17 16:51:08

+0

可能你應該嘗試在打開位圖時強制執行16bpp。 – 2012-02-18 09:07:44