티스토리 뷰

이미지 효율적 처리를 위한 방법 정리합니다. 기본적으로 이미지를 불러오려면, imageView.setDrawable() 혹은 imageView.setBitmap() 이러한 방식으로  jpeg, png 파일들을 불러와서 사용할 수  있습니다. 하지만 이런 방식들을 사용하다보면 이미지가 너무 큰 경우, 혹은 이미지가 너무 고화질인 경우에 out of Memory 문제가 발생할 수 있습니다.


그래서 이미지 효율적으로 처리하기 위한 방식 3가지를 정리하려고 합니다. 


1. 이미지 해상도별 별도의 폴더로 관리하기

안드로이드 이미지 처리

 위의 폴더와 같이 hdpi, mhdpi, xhdpi, xxhdpi 와 같이 같은 이미지라도 해상도를 분류하여 저장할 수 있습니다. 위와 같은 방법이 효율적인 이유를 설명드리겠습니다. 

안드로이드에서 이미지를 찾을 때, drawable 폴더에 가서 우선 이미지를 찾은 후에 화질별 폴더에서 이미지를 찾으로 가는 방식입니다. 그렇기 때문에 사양이 좋지 않은 기기에서 큰 이미지를 불러 와야 하는 경우, 저화질 이미지 폴더에 이미지를 넣으면 좀더 작은 크기의 이미지를 가져올 수 있습니다. 


2. 이미지 처리 라이브러리 사용하기 

 요즘에는 이미지 처리에 유용한 라이브러리가 많습니다. Glide, Picasso 등 찾아보시면 많이 있습니다. 각각 라이브러리마다 지원하는 기능들이 조금씩 다르니 원하는 기능을 지원하는 라이브러리를 사용하면 좋을 거 같습니다. (참고 : Glide 라이브러리 정리한 글이 있으니 참고해주세요 )

제가 라이브러리를 추천하는 이유는 많은 시간을 직접 쓸 필요가 없이 빠른 시간내의 메모리 문제나 이미지 변형 문제등을 해결해 줍니다. 그렇기 때문에 개발 생산성을 높일 수 있습니다. 


3. Manifest의 LargeHeap 설정 변경하기

안드로이드 Manifest 파일에서 해당 설정(largeHeap)을 true로 설정하면, 해당 앱이 휴대폰에서 좀더 많은 메모리를 사용할 수 있습니다. 하지만 엄청 추천하지 않습니다. 왠만하면 저 설정을 사용하지 않고 메모리를 효율적으로 사용하게 코드를 짜는 것이 중요합니다.


그리고 안드로이드 공식문서에서도 이렇게 설명하고 있습니다.

대부분의 앱에서는 이 속성이 필요하지 않으며 대신 성능 개선을 위해 전체 메모리 사용량을 줄이는 데 초점을 맞춰야 합니다. 또한 이 속성을 사용 설정하는 경우 가용 메모리가 고정적으로 증가될 것이 보장되지 않습니다. 왜냐하면 일부 기기는 총 가용 메모리의 제약을 받기 때문입니다.

그러니 해당 옵션을 사용할 때에는 이런 점을 숙지해야 합니다. 


감사합니다. 

댓글