2014-04-27 1 views
0

OOM 문제에 대한 많은 정보가 있지만이 질문을하기 전에 많은 답을 얻었습니다. 답을 찾을 수 없습니다. 어디서나.많은 이미지의 작은 이미지 (크기가 조정되지 않음), 거대한 힙 크기로 인한 OOM 오류의 원인

나는 이러한 이미지는 도움이되지 않습니다 그래서 inSampleSize를 축소되지 않는

image = BitmapFactory.decodeResource(getResources(), R.drawable.image); 

사용하여 작은 이미지를 많이로드하고 있습니다. 이 심상의 가장 큰 것 단지 대략 400kb이다. 내 삼성 갤럭시 s4에서 엄청난 힙을 얻고 있는데 이유가 없습니다.

04-27 13 : 38 : 40.023 : I/dalvikvm 힙 (16,915) 다음 xhdpi 이미지는 8,294,416 바이트 할당 97.450MB에

전체 힙 (파편 경우) 성장 5.1 MB 그래서 어떻게 내 힙 97.45mb에지고 ???

일부 "바이트 할당"은 매우 큽니다. 400kb가 ~ 410,000 바이트에 불과하기 때문에 2 천만 바이트 이상은 나에게 의미가 없으므로 왜 2 천만 바이트의 할당이 있습니까?

내가 테스트 한 모든 장치에서 정상적으로 작동하기 때문에 잠시 동안이 문제를 무시했습니다. 하지만 지금은 약간 더 높은 고해상도 이미지 (5.9MB 총)를 사용하려고하고 응용 프로그램이 OOM

04-27 13 도착 : 52 : 28.890 : E/dalvikvm 힙 (22,852 일) : 메모리 부족에 a 33177616 바이트 할당.

그리고

04-27 13

가리키는 : 52 : 28.900 : E/AndroidRuntime (22,852)에 com.example.packagename.Game.run (Game.java:534)

image = BitmapFactory.decodeResource(getResources(), R.drawable.image); 

이 이미지

은 42킬로바이트입니다! 3300 만 바이트 할당이 필요한 이유는 무엇입니까?

어쨌든 앱이로드되는 동안이 이미지를 미리로드 할 수 있습니까? 뷰를 전환하는 속도를 높이기 위해이 작업을 수행하기를 원하며이 이미지를 메모리가 적게 들어갈 수 있도록 저장할 수 있습니까?

+0

"400kb"는 디스크의 크기를 나타 냅니까? – CommonsWare

+0

예? 그것은 나의 컴퓨터에 420kb이다 ... – java

답변

1

합계 xhdpi 이미지는 5.1 메가는 어떻게 내 힙은 97.45mb에지고있다 (그들은/입술에 저장됩니다) ???

PNG 및 JPEG 이미지 파일은 메모리 크기에서 90-95 % 압축됩니다. 그래서, 당신은 옳은 것을 알게됩니다.

PNGJPEG 파일의 작동 방식에 대해 자세히 알게 된 후에는 상당히 많은 숫자의 documentation on bitmap management을 읽어야합니다.

관련 문제