Glide
라는 Image 처리 관련 Android labrary 에 대해서 정리를 한 포스트 입니다.
1. Glide
Glide는 Bump 라는 회사에서 최초로 개발하고 지금은 Google이 인수하여 현재까지 유지/보수를 하고 있습니다.
Web 상에서 저장되어 있는 Image를 ImageView에 그리기 위해서는 아래과 같이 복잡한 과정을 거칩니다.
- HTTP 통신을 통해 Image Byte data를 다운로드
- Image Byte data를 BitMap으로 변환
- 고화질/ 고용량 Image일 경우 OOM이 발생할 수 있기 때문에 필요한 경우 Scale Down
- Image View에 set
하지만 Glide 를 사용하게 되면 간단한 Interface 를 통해 위 과정을 코드 몇줄로 처리가 가능합니다.
2. Install
build.gradle 파일에 아래와 같이 의존성을 추가합니다.
implementation 'com.github.bumptech.glide:glide:4.11.0'
3. Simple Use
가장 기본적인 사용법은 아래와 같습니다.
Glide
.with(context)
.load("Image URL" or "Image 리소스")
.into(imageView);
4. Place Holder / Error
Glide.with(context)
.load(R.drawable.img_file_name)
.placeholder(R.drawable.img_file_place_holder)
.error(R.drawable.img_file_error)
.into(imageView)
placeHolder()
api 는 원본 Image를 보여주기 전 잠깐 보여주는 Image를 지정합니다.error()
api는 Image를 로드 중에 에러가 발생할 경우 보여주는 Image를 지정합니다.
5. Resizing
- Glide는 기본적으로 Image View 사이즈에 맞게 Image를 다운로드하고 캐싱을 합니다. 명시적으로 Image 사이즈를 변경하려면
override(width, height)
를 호출합니다.
Glide
.with(context)
.load("Image URL" or "Image 리소스")
.overrid(600, 200)
.into(imageView)
6. Priority
-
Glide 라이브러리는 동시에 Image 로드 명령을 받았을 때, 지정한 우선순위에 따라 Image를 로드하도록 지원합니다.
priority()
메서드에Priority
enum 을 인수로 지정하여 우선순위를 변경합니다.- Priority.LOW
- Priority.NORMAL
- Priority.HIGH
- Priority.IMMEDIATE
- Glide 라이브러리는 이 우선순위대로 Image 로드를 수행하지만, 반드시 우선순위 순서대로 진행된다는 보장은 없습니다.
7. Cache
-
Glide 는 Image 로딩 속도를 빠르게 하기 위해 Cache 를 지원합니다.
-
Cache 에 대해 매핑되는 key 값은 image uri 주소를 사용합니다.
-
Cache는 Disk Cache, Memory Cache 를 지원합니다.
-
Cache 는 LRU 알고리즘 기반으로 동작합니다.
Memory cache
- Memory cache 의 사이즈는
MemorySizeCalculator
class 에 결정이 되며MemorySizeCalculator
는 디바이스의 총 memory size , 화면 너비/높이/밀도 를 이용하여 Memory cache 사이즈를 결정합니다. - Glide는 디폴트로 Memory cache를 사용하며 사용하지 않을 때에는
skipMemoryCache(true)
를 호출합니다.
Glide
.with(context)
.load("Image URL" or "Image 리소스")
.skipMemoryCache(true)
.into(imageView)
Disk cache
-
Disk cache size는 디폴트로 250BM를 사용합니다.
-
Disk cache 을 끄려면
diskCacheStrategy(DiskCacheStrategy.NONE)
메서드를 호출한다. - diskCacheStrategy 메서드는 DiskCacheStrategy enum을 인수로 받는다.
- DiskCacheStrategy.NONE : Disk cache을 하지 않는다.
- DiskCacheStrategy.SOURCE : 원본 Image만 캐싱
- DiskCacheStrategy.RESULT : 변형된 Image만 캐싱
- DiskCacheStrategy.ALL : 모든 Image를 캐싱(디폴트)
- Memory cache 과는 별개이므로, 둘다 사용하지 않을 경우 다음과 같이 둘다 꺼주어야 한다.
Glide
.with(context)
.load("Image URL" or "Image 리소스")
.skipMemoryCache(true)
.diskCacheStrategy(DiskCacheStrategy.NONE)
.into(imageView)
댓글남기기