본문 바로가기
🖥 Programming/📱 Android (Kotlin)

[Android][kotlin] Glide 이미지 캐시 및 preload 알아보기

by MinChan-Youn 2022. 5. 11.

안녕하세요~ 챠니입니다! :)

오늘은 이미지 라이브러리 중 하나인 Glide에 대해서 알아보겠습니다.

 

이 글의 중점은

1. Glide 이미지 캐시

2. Glide 이미지 미리 로딩(preload) 입니다.

0. 권한 및 의존성 설정(Permission, Dependency)

- 권한설정 Permission설정

<uses-permission android:name="android.permission.INTERNET" />
<!-- Glide가 연결 상태를 감시하고 실패한 요청을 재시작하는 것을 허용 -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<!-- ExternalPreferredCacheDiskCacheFactory를 사용하여 Glide의 캐시를 공개 sdcard에 저장하기 위해 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

- 의존성 Dependency설정

dependencies {
	...
    
    implementation 'com.github.bumptech.glide:glide:4.13.0'

	...
}

 

 

    1. Glide 기본 형태 사용법

    // 1. 글라이드 기본 형태 사용법
    private fun default() {
        Glide.with(this).load(ImageURL).into(R.id.iv)
    }

     

     

     

    2. Glide 디스크 캐시

    Glide는 기본적으로 메모리 & 디스크에 이미지를 캐싱하여 다음번엔 빠른 이미지 로딩을 지원합니다.

    Glide 는 이미지를 불러오기 위해 아래와 같은 절차로 여러 캐시를 확인을 합니다.

    1. Active resources — 현재 이 이미지가 다른 뷰에 나타나는가?

    2. Memory cache — 이 이미지가 최근에 메모리에 로드되었거나, 여전히 메모리에 남아있는가?

    3. Resource — 이 이미지가 예전에 디코드되었거나, 변형되었거나, 디스크 캐시에 기록되었는가?

    4. Data — 이 이미지가 이전에 디스크 캐시에 기록되었던 데이터였는가?

    출처 : https://medium.com/android-news/best-strategy-to-load-images-using-glide-image-loading-library-for-android

     

    ◼ 메모리 캐시

    기본적으로 메모리 캐싱을 하기때문에, 메모리 캐싱을 위해 추가적으로 할 일은 없다.

    단, URL 이미지 로딩 시 한번 로드한 이미지는 chache 에 저장되어 서버에서 해당 이미지를 변경해도

    App 의 이미지는 갱신되지 않는다.

     

    이런 경우, skipMemoryCache(true) 로 메모리 캐시를 사용하지 않을 수 있다.

     

     

    // 2. 글라이드 디스크 캐시전략
    // 캐시 정책 DiskCacheStrategy
    // DiskCacheStrategy.NONE: 아무 것도 캐시하지 않음을 나타냅니다
    // DiskCacheStrategy.SOURCE: 원래 이미지만 캐시됨을 나타냅니다
    // DiskCacheStrategy.RESULT: 변환된 이미지만 캐시합니다(기본 옵션)
    // DiskCacheStrategy.ALL: 원래 그림도 캐시하고 변환된 그림도 캐시합니다
    private fun diskCacheStrategy () {
        Glide.with(this).load(ImageURL).diskCacheStrategy(DiskCacheStrategy.ALL).into(R.id.iv)
    }

     

     

    3.  Glide 캐시에서만 이미지 불러오기

    // 3. 오직 캐시에서만 이미지 불러오기
    //이미지가 메모리 캐시 또는 디스크 캐시에서 발견되면 load 되고 없다면 load가 실행되지 않습니다.
    private fun onlyRetrieveFromCache(){
        Glide.with(this).load(ImageURL).onlyRetrieveFromCache(true).into(R.id.iv)
    }

     

     

    4. Glide 메모리캐시 건너뛰기

    // 4. 메모리캐시 건너띄기 skipMemoryCache()
    // 디스크캐시 건너띄기 iskCacheStrategy(DiskCacheStrategy.NONE)
    // 둘다 건너띄기는 같이 쓰면됨
    // 일반적으로 캐시를 건너 뛰지 않는걸 권장.
    // 이미지를 검색, 디코딩 및 변환하여 새 썸네일을 만드는 것보다 캐시에서 이미지를 load하는 것이 빠름
    // 아래는 둘다 건너띈 코드
    private fun skipMemoryCache(){
        Glide.with(this).load(ImageURL)
            .skipMemoryCache(true)
            .diskCacheStrategy(DiskCacheStrategy.NONE).into(R.id.iv)
    }

     

     

     

    *. Glide Preload

    이번에 알게된 좋은 메소드입니다.

    이미지를 필요할때마다 로딩을 하게되면 딜레이가 생기기 마련이지만 "preload()"를 사용하여 미리 로딩하고

    디스크에 저장된 이미지를 바로 불러와 빠르게 이미지를 보여줄 수 있는 장점이 있습니다.

    Glide.with(this)
        .load(ImageURL)
        .preload()
    //기본적인 Glide 호출
    Glide.with(this).load(ImageURL).into(R.id.iv)
    
    //캐시에 저장된 이미지가 있을때만 불러오기
    Glide.with(this).load(ImageURL).onlyRetrieveFromCache(true).into(R.id.iv)
    
    //디스크 캐시 전략
    Glide.with(this).load(ImageURL).diskCacheStrategy(DiskCacheStrategy.ALL).into(R.id.iv)

     

     

    글 정리 & 소스코드

    [정리]

    Glide Cache: https://github.com/younminchan/kotlin-study/tree/main/GlideCache_kotlin

     

    GitHub - younminchan/kotlin-study: kotlin 다양한 예제코드

    kotlin 다양한 예제코드. Contribute to younminchan/kotlin-study development by creating an account on GitHub.

    github.com

     

     

    질문 또는 궁굼한 부분은 댓글을 남겨주세요! 친절하게 답변드리겠습니다!

    응원의 댓글은 저에게 큰 힘이 된답니다! :)

    즐거운 하루되세요!

     

    깃허브 보러 놀러오세요 👇 (맞팔환영)

    https://github.com/younminchan

     

    younminchan - Overview

    안드로이드 2년차 개발자 •⚽️/🎤/🥁/🖥/🏃‍♂️/🚴‍♂️/🤟 TechBlog⬇️ minchanyoun.tistory.com - younminchan

    github.com