2013-07-15

안드로이드 이미지 로드 라이브러리

안드로이드에서 비트맵을 로드하는 코드를 짤 때, 초보와 고수를 막론하고 항상 막히는 문제가 있다. 지긋지긋한 비트맵 메모리 누수 에러(Bitmap OutOfMemoryError)가 바로 그 문제인데, 이를 해결하기 위해 별별 방법이 동원되어왔다. 액티비티가 끝나면 가비지 컬렉팅을 하라는 둥, 이미지를 미리 줄여서 불러오라는 둥(BitmapFactory.Options.inSampleSize)…… 사실 본인의 경우도 이 문제로 무지막지하게 고생한 관계로 덕분에 이미지 다루는데는 꽤 능숙해졌지만 여전히 마음에 안드는 부분은 많이 존재한다.

어지간한 이미지 로드 코드도 OutOfMemoryError 앞에는 장사가 없었는데, 얼마전에 찾아낸 라이브러리는 개발자가 이미지 로드에 대해 더 이상 신경쓰지 않아도 되도록 해 주었다.

https://github.com/nostra13/Android-Universal-Image-Loader

Android Universal Image Loader 라는 이름의 오픈소스 라이브러리이다. 이 라이브러리는 개발자가 이미지를 로드할 때에 고려해야 하는 거의 모든 사항을 다루고 있으며, 개발속도를 확실하게 빠르게 해 줄 것이다. 이 라이브러리는 메모리 힙사이즈의 빈 공간을 고려해서 이미지 디코딩을 하기 때문에, OutOfMemoryError를 대부분 회피할 수 있다.

SDCard에 있는 이미지를 로드하는 것 뿐만 아니라, 웹의 이미지도 로드하기 편하다. 다운로드부터 캐시 생성, 디코딩까지 전부 이 라이브러리가 담당해 주는데다, 여러개의 이미지를 동시에 로딩할 때의 스레드 작업 우선순위 등 세세한 요소까지도 모두 설정이 가능하다.

단점이 하나 있다면, 이 설정이라는 걸 싱글턴 기법으로 만들어놓은 탓에 무조건 전역으로 작동한다는 것. 설정을 바꾸려면 초기 설정을 전부 리셋하고 다시 설정해줘야 한다. 이것 때문에 코드가 살짝 지저분해질 수 있다는게 조금 그렇다. 단, 이것 하나를 제외하면 정말 마음에 드는 녀석이다.

지난번에 작성했던 포스팅에서 소개한 핀치 투 줌 라이브러리와 같이 사용하면 아주 좋다.

댓글없음

님께 답글 취소
댓글 등록 요청
스팸 댓글을 줄이기 위해 Akismet을 사용하고 있습니다.