2012-02-17 1 views
2

4 개의 큰 비트 맵 (6 x 화면 크기)을 표시해야하는 Android 응용 프로그램에서 작업하고 있습니다. 처음에는 문제가 있었지만 전체 장치에서 작동하는 메모리 관리에 대한 코드 최적화가있었습니다. 하지만 4.0.3 안드로이드 버전의 ASUS Transformer Prime에서 OutOfMemory 오류가 발생했습니다. Heap Size가 256Mb로 보이기 때문에 매우 이상합니다. 제대로 작동하는 다른 장치와 비교해보십시오.왜 ASUS Transformer Prime이 OutOfMemory 예외가있는 유일한 장치입니까

대형 힙 및 비활성화 된 하드웨어 가속을 활성화했습니다.

문제에 대한 아이디어가 있습니까?

답변

2

화면 크기가 1280x800이므로 화면 크기의 32bpp 비트 맵은 4MB 미만이어야하며 6x 화면 크기 비트 맵은 23.5MB가 필요합니다. 그리고 네 개가 필요합니다 ... 93.75MB입니다.

프로세스 힙 제한은 장치에 따라 다르지만 64MB는 많은 것으로 간주됩니다 (아마도 나는 시대에 뒤진 것입니다). 256MB는 대단합니다!

IMHO 이런 대용량 비트 맵을 메모리에 보관해서는 안됩니다. 화면보다 크지 않고 필요한 타일을 적재하는 것이 더 낫습니다.

또는 16bpp 이미지를 사용하거나 JNI (즉 C)에서 거대한 비트 맵을위한 공간을 할당하고 Java 힙 관리를 완전히 건너 뛰십시오.

+0

6 x 화면 높이의 4 비트 맵은 필요 없지만 하나만 있습니다. 다른 것들은 더 작습니다. 이 4 개의 비트 맵은 서로간에 표시되고 애니메이션되기 때문에 동시에로드해야합니다. PRIME에서 비슷한 크기 (résolution, size)의 장치에서 예외를 생성하지 않지만 힙 크기 메모리가 적은 것은 매우 궁금합니다. –

+0

아마도 비트 맵을 열 때 16bpp를 시행해야합니다. –