본문 바로가기
  • _^**_
무근본 IT 지식 공유/무근본 안드로이드(Android)

[무근본 안드로이드 사진첩] Out of memory

by 크리드로얄워터 2023. 3. 26.
반응형

 

 

커스텀 리스트 뷰인 사진첩을 위아래로 왔다갔다하면 결국 Out of memory on a ~ 하면서 꺼지는 현상.

리스트 뷰 내에 용량이 큰 사진이 위치할 때 그런 오류가 훨씬 잘 발생한다.

 

 

* GC란?: http://beautyrain.tistory.com/3

* 힙 메모리란?: http://runtoyourdream.tistory.com/237

 

* 안드로이드의 램고자 현상의 원인: http://blog.naver.com/dr_insect?Redirect=Log&logNo=80171034051

* 안드로이드 메모리 관리에 대한 실험: http://www.clien.net/cs2/bbs/board.php?bo_table=lecture&wr_id=130262

 

힙 메모리 관련 급 궁금...↓

* (C, C++) 동적할당을 하는 이유?: http://tiktoor.tistory.com/40  ,  http://blog.naver.com/sonicjn?Redirect=Log&logNo=10027324190

http://blog.naver.com/talchulgu?Redirect=Log&logNo=10131373542

 

 

그렇다면 내 앱에서의 힙 공간 사용량을 보자..... 스크롤을 올렸다 내렸다 반복하다가 순간의 상황을 캡쳐한 것이다...

 

사진의 크기가 문제가 아닌 것 같다.

사진의 크기는 고작 몇백키로바이트밖에 되지 않지만

힙 공간을 왜 저리 많이 차지하는 것일까?

코드의 문제라고 생각한다.

 

 

좀 더 알아보자~

 

* Adapter 내의 getView에 대한 고찰

: http://myelf.egloos.com/2723978

 

 

 어라? 한 부분만 고치니까 문제가 해결되었다.

원래 저 빨간 부분에 이미지다운로더를

ImageDownloader A=new ImageDownloader();

이렇게 선언해줬었는데

이는 이미지 다운로더를 getView가 호출될 때마다 힙 영역에 반복적으로 생성해주어

메모리의 누수를 가져올 수 있던 것이다.

그래서 스크롤을 할 때마다 이게 계속 선언되어 힙 영역을 차지했던 거구나..

라고 생각해본다.

 

결론적으로 전역으로 static 변수로 선언해주어

같은 것을 반복 사용하도록 하였더니....

 

 

 

아까와는 달리 안정적인 모습~~

그러나 51 메가 정도나 할당 받는데....

왜 이리 많이 받지?

그게 더 궁금하다.

반응형

댓글