안녕하세요~ 챠니입니다! :)
오늘은 이미지 라이브러리 중 하나인 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 — 이 이미지가 이전에 디스크 캐시에 기록되었던 데이터였는가?
◼ 메모리 캐시
기본적으로 메모리 캐싱을 하기때문에, 메모리 캐싱을 위해 추가적으로 할 일은 없다.
단, 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
질문 또는 궁굼한 부분은 댓글을 남겨주세요! 친절하게 답변드리겠습니다!
응원의 댓글은 저에게 큰 힘이 된답니다! :)
즐거운 하루되세요!
깃허브 보러 놀러오세요 👇 (맞팔환영)
https://github.com/younminchan
'🖥 Programming > 📱 Android (Kotlin)' 카테고리의 다른 글
[kotlin] ViewPager2 + TabLayout 스와이프 뷰 만들기 (2) | 2022.07.06 |
---|---|
[안드로이드] 앱 초기 로딩시 흰 화면 없애기(인트로 페이지 공백없애기)(intro, splash) (0) | 2022.07.04 |
[kotlin][android] 토스트메세지(Toast msg) 중복 방지 (0) | 2022.06.17 |
[Android][kotlin] Android jetpack WorkManager (작업예약, 백그라운드 ) (1) | 2022.05.13 |
[Android][kotlin] QRcode Generate (QR코드 생성하기) 초간단!! (0) | 2022.05.11 |
[Android][kotlin] Go to the documentation to learn how to Fix dependency resolution errors. (0) | 2022.05.10 |
[Android][Kotlin] 네이버 아이디 로그인(네아로) 연동(Naver Login) (2) | 2022.04.29 |
[Android][Kotlin] 페이스북 로그인 API 연동(Facebook Login) (0) | 2022.04.29 |