본문 바로가기

안드로이드

안드로이드 이미지 캐쉬

1. 큰 이미지를 효율적으로 로딩하기 

 - 사이즈가 큰 이미지를 로드할때는 메모리에서 굉장히 많이 차지하므로 화면크기보다 큰 사이즈의 이미지는 필요한 사이즈에 맞게 조절해서 로드하는 것이 좋다. 원래 이미지의 해상도와 화면에 보이려는 이미지뷰의 해상도의 값을 구해 품질을 떨어트리면 된다. 로드하려는 이미지의 해상도를 알아내기 위해 BitmapFactory.Options injustDecodeBounds =true로 설정해놓고 읽는다. 

2. 참조 객체 

 - 가비지 컬렉터는 참조의 강약에 따라 도달가능한 객체를 제외하고 모두 쓰레기로 간주한다. 

 1) Strong reference ->new를 통해 객체를 생성한다. 가비지 콜렉터에서 무조건 제외되므로 메모리 누수 조심

 2) soft reference -> 객체에 참조를 넘겨주면서 생성, 메모리가 여유가 있으면 수거하지 않고 메모리에 여유가 없다면 수거된다.

 3) weak reference -> 가비지콜렉터가 발생하기전에는 참조를 유지하지만 발생하면 바로 수거된다.

자주쓰는 객체를 이용할때는 자주 사용한다. 

3. 이미지 캐싱하기 - 메모리가 충분치 않기 때문에 이전로딩된 이미지는 가비지 콜렉팅된다. 하지만 스크롤시 매번 새로 다시 로딩하는 것은 비효율적, 매번 로딩하는 것보다 효율적이다. 

    메모리 캐쉬 - Lrucache : LinkedHashmap을 사용하고 최근에 사용된 객체의 Strong reference를 보관하고 있다가 정해진 캐시 사이즈가 오버되면 가장 최근에 사용하지 않는 것부터 제거하는 LRU 알고리즘 메모리 캐쉬

   -> 메인스레드에서 수행가능

    디스크 캐쉬 - DiskLruCache : 메모리 캐쉬에 비해 속도가 느리지만 저장공간이 크다. 

   -> 백그라운드에서 수행