안드로이드 앱 최적화를 진행하면서 안드로이드 모니터로 메모리 사용 현황을 체크해봤는데,
생각보다 그래픽 관련 리소스가 메모리에서 비워지지 않고 계속 할당되어 있는 것을 볼 수 있었다.
찾아낸 여러가지 방안으로
첫째 : 우선 통짜 비트맵 객체를 이용할 경우 비트맵.recycle() 을 통해 비트맵 메모리를 놓아줄 수 있다고 한다.
둘째 : 안드로이드 앱에서 사용되는 이미지 뷰들이 참고하는 drawble 소스를 null로 놓아준다. 이미지뷰.setImageDrawable(null);
아래의 세 그래프 캡처는 최적화를 진행하는 중에 메모리의 변화 과정이다. 세 측정동안 측정 시간이 달라 그래프의 굴곡이 달라보이는 것은
측정 시간 탓일 수 있다.
주목할 점은 위와 같은 코드들을 앱에 적용하면서 실제 메모리 사용량이 어느정도는 줄어든 것을 볼 수 있었다는 점이다.
아래는 세 번의 측정동안 마지막 결과화면에서 메모리 사용량을 모아 캡처해 본 모습이다.
두번째 시도에서는 더러 메모리 사용량이 늘기도 했는데, 위 코드를 적용한 뒤인 마지막 세번째에서는 자바 관련 메모리가
차지하는 용량이 줄어든 것을 확인 할 수 있다.
실험에 엄격한 조건을 주고 한 것이 아니라, 어느 액티비티에서 측정하느냐, 얼마만큼의 시간을 측정하느냐 등에 따라서 더 격차가 발생할 수도
혹은 비슷한 조건을 나타낼 수도 있다.
참조 :
https://stackoverflow.com/questions/27924092/memory-used-by-imageview-is-never-released
'ANDROID > Performance' 카테고리의 다른 글
[안드로이드] include 태그를 사용하고 있다면? merge 태그로 레이아웃 계층 줄이기 (0) | 2020.10.07 |
---|---|
[안드로이드] 구글이 소개하는 메모리 최적화 기법들을 리뷰해보자 (0) | 2020.07.12 |
[안드로이드] 안드로이드 스튜디오의 Inspect Code로 프로젝트 자가진단하기 (0) | 2019.08.26 |
[안드로이드] 안드로이드 오버드로우 개선 - 레이아웃의 background를 확인하자 (0) | 2018.05.04 |
[안드로이드] 메모리 누수 감지를 위한 LeakCanary 앱에 적용하기 (0) | 2018.03.02 |