2017-09-13 3 views
0

Android 애플리케이션에서 메모리 사용을 모니터링하고 흥미로운 현상이 나타났습니다. 비트 맵 (PNG 파일, 380x10640)을로드 할 때 일부 장치 (예 : Modecom FreeTab 9004, API 17)에서 비트 맵을로드하는 코드를 15MB 줄인 코드를 실행 한 후 사용 가능한 메모리 양을 관찰하고 최대 60 개 MB 다른 (즉, Nexus4 API 25). 아무도 내게 왜 이런 일이 일어나는 이유를 설명 할 수 있겠습니까?BitmapFactory 및 메모리 소비에 대한 다른 값

나는 Runtime.getRuntime().freeMemory()을 사용하여 힙을 모니터하고 다음 명령을 사용하여 비트 맵을로드합니다.

Resources r = getResources(); 

private Bitmap imageOne; 

// ... 

imageOne = BitmapFactory.decodeResource(r, R.drawable.bitmap_1); 

답변

0

메모리 소비의 차이는 다른 장치 기본값 인 비트 맵 구성 때문입니다.
예를 들어 기본값이 RGBA_F16 인 경우 각 픽셀은 8 바이트 인 ARGB_8888 - 4 바이트를 사용합니다. 따라서 계산할 경우 :

380 * 10640 = 4043200 pixels * 8 bytes = 32345600 byte ~32 mb. 

32 대신 60mb - 이미지가 캐시되거나 버퍼링되거나 실수로 두 번로드 될 수 있습니다.

수동으로 이미지를로드 할 수 있습니다. 이렇게하면 Config를 선택할 수 있습니다.

UPDATE1 : 다른 DPI에 대한 이미지 사전 크기 조정으로 인해 60mb 또는 15mb가 발생할 수 있습니다

관련 문제