개발/Android

[Android] 이미지 파일 사이즈 얼마나 알고 계신가요?

Dev Aaron 2020. 11. 8. 22:05
반응형

최근 개발하고 있는 앱의 특정 화면에서 버벅 거리는 현상이 리포팅되었습니다. 해당 화면을 살펴보니 CardView 4개가 LinearLayout에 나란히 올라가 있고, 2개의 CardView에는 각각 ImageView가 한개씩, 나머지 2개에는 약간의 텍스트와 아이콘이 전부였습니다.

의아했습니다.
네트워크/DB/파일 읽고 쓰기와 같은 로직이 있는 것도 아니었는데 대체 왜 버벅이는 거지?

일단 제가 사용하던 갤럭시 S10e에서는 아무런 문제가 없었습니다. 리포팅된 기기는 갤럭시 노트4… 제 갤럭시 S6를 꺼내들어 확인해보니 S6에서도 버벅이는 것이 확인되었습니다.

문제 분석

우선 바로 Profiler를 실행하고 뭐가 문젠지 확인해봤습니다.

CPU, Memory를 중점적으로 봤고, 그 중 CPU가 다른 화면과 달리 좀더 사용하는 것이 확인되었습니다. 특히 RenderThread가요…

앞서 해당 화면에는 ImageView가 단 2개가 사용되고 있다 말씀드렸는데요. 각각 이미지 파일의 크기는 83KB, 23KB밖에 안되는 아주 작은 파일이었습니다.

그런데 이게 제 착오였습니다.
파일 사이즈는 83KB에 불과하지만 실제 메모리에 올라갔을 때의 크기는 전혀 생각하지 않았던 거죠.

이미지가 메모리 상 올라왔을 때의 크기

그럼 83KB 크기의 이미지 파일이 메모리에 올라가면 얼마의 사이즈를 잡게 될까요?

Android Studio에서 이미지 파일을 선택하게 되면 우측 상단에 위와 같이 이미지 파일의 정보가 나옵니다.

이때 메모리에 올라갔을 때의 크기는 다음과 같습니다.

640 * 426 * 4 = 대략 1.04MB

38KB짜리 이미지가 실제로 메모리에 올라가게 되면 1.04MB로 뻥튀기됩니다! 실제로 제가 사용했던 이미지는 83KB였지만 위와 같이 계산했을 때 1.04MB였던 것으로 확인했습니다. 이러니… S6와 같은 기기에서 해당 이미지를 보여줄 때 RenderThread에 부하가 걸렸던 거겠죠? 해당 이슈는 저 해상도 이미지로 교체하는 것으로 쉽게 해결되었습니다.

정리하면…

구형 디바이스에서 화면 버벅임 이슈가 리포팅되었고, Profiler로 문제를 분석하여 원인을 찾았습니다. 그리고 이미지 파일이 메모리 상으로 올라갔을 때의 크기를 이번 기회를 통해 고려할 수 있게 되었고요. 따라서 앞으로 이미지를 쓰실 때에는 실제 메모리에 올라갔을 때의 크기를 계산하여 해상도를 미리 조절할 필요가 있을 것 같습니다.

반응형
댓글수0