2011-03-20 4 views
2

저는 2000x2000 px 이미지의 비트 맵을 사용하여 활동을 사용하는 게임을 개발하고 있습니다.같은 응용 프로그램은 다른 안드로이드 장치에 다른 양의 메모리를 사용합니다.

활동을 실행할 때 HTC Hero에서 12MB를 사용하고 있습니다.

그러나 16MB 힙이있는 에뮬레이터에서 응용 프로그램을 실행하려고하면 OutOfMemoryError가 16,4 MB를 할당하려고하기 때문에 VM이 충돌합니다. 어떻게 가능할까요?

다른 에뮬레이터와 함께 시도해 보았는데 20MB가 사용되었습니다.

내가이 사용하고있는 메모리의 양을 측정하려면 :

int usedMegs = (int) (Debug.getNativeHeapAllocatedSize()/1048576L); 
    String usedMegsString = String 
    .format(" - Memory Used: %d MB", usedMegs); 
    getWindow().setTitle(usedMegsString); 

않는 이유는 다른 장치에서 같은 비트 맵 필요 a를 HTC 영웅에 12메가바이트 및 20메가바이트?

편집 : 밀도의 원인을 알아 냈습니다. 밀도 1 = 12MB, 밀도 0.75 = 8MB 및 밀도 1.5 = 20MB (다른 활동의 일부 MB는 정확하지 않음)

1을 사용하여 1을 사용하여 비트 맵을 디코딩 할 수 있습니까?

편집 2 : 이미지를/drawable에 넣었으므로 1.5로로드했을 때 이미지가 커졌습니다. 이미지를/drawable-hdpi에 넣으면 크기가 조정되지 않기 때문에 이미지의 메모리 (12MB)가 줄어 듭니다.

답변

2

메모리에 비트 맵을로드하는 방법은 무엇입니까? 이것은 내 부분에 대한 추측이지만 다른 장치가 32 비트 색상 공간을 사용하는 동안 HTC 장치가 24 비트 색상 공간을 사용하여 비트 맵을로드하고있는 것일 수 있습니다. 한 픽셀 당 24 비트의 2000x2000 비트 맵은 대략 12MB의 메모리를 사용하지만 한 비트 당 32 비트의 동일한 비트 맵은 16MB 나 메모리에 더 가깝습니다.

+0

내 영웅은 밀도가 1 인 HVGA 였기 때문에 그 이유가 있습니다. 나는 WVGA 에뮬레이터로 시도했다. 나는 12MB를 항상 얻기 위해 모든 장치에서 밀도를 1로 설정할 수 있는지 잘 모릅니다. – Antonio

관련 문제