Glide

Glide 라는 Image 처리 관련 Android labrary 에 대해서 정리를 한 포스트 입니다.

1. Glide

Glide는 Bump 라는 회사에서 최초로 개발하고 지금은 Google이 인수하여 현재까지 유지/보수를 하고 있습니다.

Web 상에서 저장되어 있는 Image를 ImageView에 그리기 위해서는 아래과 같이 복잡한 과정을 거칩니다.

  1. HTTP 통신을 통해 Image Byte data를 다운로드
  2. Image Byte data를 BitMap으로 변환
  3. 고화질/ 고용량 Image일 경우 OOM이 발생할 수 있기 때문에 필요한 경우 Scale Down
  4. 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)

태그:

카테고리:

업데이트:

댓글남기기