본문 바로가기

ANDROID/Performance

[안드로이드] 안드로이드 앱 메모리 최적화 - 이미지뷰 drawable 비우기

안드로이드 앱 최적화를 진행하면서 안드로이드 모니터로 메모리 사용 현황을 체크해봤는데, 


생각보다 그래픽 관련 리소스가 메모리에서 비워지지 않고 계속 할당되어 있는 것을 볼 수 있었다.


찾아낸 여러가지 방안으로 


첫째 : 우선 통짜 비트맵 객체를 이용할 경우 비트맵.recycle() 을 통해 비트맵 메모리를 놓아줄 수 있다고 한다.


둘째 : 안드로이드 앱에서 사용되는 이미지 뷰들이 참고하는 drawble 소스를 null로 놓아준다. 이미지뷰.setImageDrawable(null);




아래의 세 그래프 캡처는 최적화를 진행하는 중에 메모리의 변화 과정이다. 세 측정동안 측정 시간이 달라 그래프의 굴곡이 달라보이는 것은


측정 시간 탓일 수 있다.







주목할 점은 위와 같은 코드들을 앱에 적용하면서 실제 메모리 사용량이 어느정도는 줄어든 것을 볼 수 있었다는 점이다.


아래는 세 번의 측정동안 마지막 결과화면에서 메모리 사용량을 모아 캡처해 본 모습이다.


두번째 시도에서는 더러 메모리 사용량이 늘기도 했는데, 위 코드를 적용한 뒤인 마지막 세번째에서는 자바 관련 메모리가


차지하는 용량이 줄어든 것을 확인 할 수 있다.



실험에 엄격한 조건을 주고 한 것이 아니라, 어느 액티비티에서 측정하느냐, 얼마만큼의 시간을 측정하느냐 등에 따라서 더 격차가 발생할 수도


혹은 비슷한 조건을 나타낼 수도 있다. 






참조 : 


https://stackoverflow.com/questions/27924092/memory-used-by-imageview-is-never-released