안드로이드에서는 이미지 캐시를 위한 라이브러리가 다양합니다.
아마 대표적인 라이브러리는 AUIL, Volley, Picasso 등이지 않을까 합니다.
이 라이브러리에 대해서 궁금하거나 각 라이브러리의 비교 정보를 원하시면, 여기에서 확인하세요.
저는 안드로이드 개발자 사이트에서 제공하는 BitmapFun프로젝트에 있는 이미지 캐시를 사용했습니다.
이 캐시는 이미지를 BitmapDrawable로 변환하여 메모리에 담아두고 있습니다.
그래서 최종적으로 ImageWorker에서 ImageView.setImageDrawable() 메소드를 사용해서 이미지를 설정합니다.
제가 겪은 문제는 ImageView가 동일한 BitmapDrawable을 사용함으로써 생기는 문제 입니다.
제가 발생한 단계를 아래에 적어보겠습니다.
A 액티비티와 B 액티비티가 있습니다. 그리고 이 두 액티비티에서 ImageView는 서로 크기가 다르고 ScaleType이 fitXY 입니다.
A 액티비티에서는 이미지 캐시로부터 a, c 이미지를 가져와서 보여줍니다.
그리고 버튼을 클릭해서 B 액티비티로 화면을 전환했습니다.
B 액티비티에서도 이미지 캐시로부터 b, c 이미지를 가져와서 보여줍니다.
BACK키를 눌러서 A 액티비티로 되돌아 옵니다.
A 액티비티에서는 c 이미지가 이전과 다른 크기로 보여지고 있습니다.
처음에 말한 것과 같이 이런 문제가 발생하는 이유는 두 ImageView가 동일한 BitmapDrawable을 사용했기 때문입니다.
A 액티비티에서 BitmapDrawable의 크기는 변경되었습니다.
B 액티비티에서 BitmapDrawable의 크기가 다시 변경되었습니다.
하지만 되돌아온 A 액티비티에서는 BitmapDrawable이 이전과 동일하기 때문에 BitmapDrawable의 크기를 변경하지 않습니다.
이 문제를 해결하는 방법은 이 BitmapDrawable을 설정하기 전에 ImageView의 이미지를 초기화 한 다음 이미지를 설정하면 됩니다. 즉, ImageView.setImageDrawable(null) 을 호출하거나, 로딩이미지나 기본 이미지로 설정해주면 이러한 문제가 발생하지 않습니다.
'안드로이드' 카테고리의 다른 글
안드로이드에서 구글 드라이브와 연동시 발생하는 오류 해결 (0) | 2014.03.07 |
---|---|
한글이 포함된 javadoc을 생성할 때 발생하는 오류 (0) | 2014.02.27 |
HTTPS 통신하기 (0) | 2014.01.25 |
버튼 패딩 제거하기 (0) | 2014.01.08 |
구글 플러그인 설치하기 (Google Plugin for Eclipse) (0) | 2014.01.07 |
[안드로이드] RenderScript 빌드 오류 문제 해결 (0) | 2013.11.12 |
[안드로이드] ActionBar Indicator 커스텀마이징하기 (0) | 2013.10.30 |
[안드로이드] InputStream을 닫는데 왜 오래 걸릴까? (0) | 2013.04.19 |
[안드로이드] Dialog.dismiss()를 할 때, java.lang.IllegalArgumentException: View not attached to window manager 예외 회피하기 (2) | 2013.03.08 |
[안드로이드] Collection을 사용 할 때 ConcurrentModificationException을 피하는 방법 (0) | 2013.03.06 |