Glide란?

2021. 1. 18. 00:41android

1. 개념


glide란 구글에서 밀고있는 이미지 로딩 라이브러리입니다. 

 

2. 특징


- gif, video등을 로딩하는 것도 가능하다.

 

- 빠른 로딩을 위해 내부적으로 cache를 갖는다.

 

- httpUrlConnection 라이브러리를 기반으로 하지만, volley, okHttp 등의 라이브러리를 사용할 수 있는 플러그인도 지원한다. (때문에 url을 통해 웹서버에 접근하여 file등을 다운로드 받을 수 있고 이를 로딩할 수 있습니다.)

 

3. 구조


 

유저가 요청한 이미지를 불러오기 위해 Glide 내부에서 거치는 과정입니다. 

 

1. 요청한 Data가 캐시에 저장되어 있는지 먼저 확인합니다. 만약 한번 이상 로딩했다면 이는 캐시에 저장되어 빠르게 이미지를 로딩할 수 있습니다.

 

2. 캐시에 저장되어 있지 않다면 load할 데이터를 불러와서 로딩합니다. 이는 로컬에 저장된 데이터가 아닌 network통신(데이터가 url인경우)을 통해서 얻어올 수도 있습니다. 

 

캐시를 사용해서 좋은점도 있지만 반대로 메모리관리도 잘해야합니다. 물론 Glide에서는 이를 해결할 수 있도록 메서드를 구현하고 있습니다.

 

4. Cache 관리


1. skipMemoryCache(Boolean)

-> 로딩한 데이터를 캐시에 저장하길 원치 않는다면 아규먼트 값으로 true를 전달해주면 됩니다. 

 

2. diskCacheStrategy(DiskCacheStrategy strategy)

-> 동일한 리소스(data)를 다양한 크기로 여러 번 사용하고 대역폭 사용을 줄이는 대신 일부 속도 및 디스크 공간을 절충하려면 DiskCacheStrategy.DATA or DiskCacheStrategy.ALL을

넘겨줄 수 있습니다. 만약 캐시에 어떠한 data도 저장하지 않고싶다면  DiskCacheStrategy.NONE을 사용하면 됩니다.

 

 

5. Cache 무효화


간혹가다가 Glide에 다른 이미지 업로드가 되지 않는 경우가 존재합니다. 이는 캐시에 남아있는 데이터가 먼저 호출되기 때문입니다.

 

디스크의 캐시들은 해싱된 키 값이기 때문에 이들을 모두 추적해서 캐시를 삭제하는 방법은 쉽지 않습니다. 따라서 원하는 이미지를 로드하려면 콘텐츠가 변경될 때 이를 식별하는 식별자를 매번 다르게 하여 캐시가 저장하지 않은 데이터라고 인식하게 하는 것입니다. 

 

- signiture(objectkey("metaData"))

-> 해당 메서드를 사용하여 해시키 값을 변경시킬 수 있습니다. "metaData"로는 수정된 날짜, mime type, mediaStore item등 다양한 데이터를 넣어주면 됩니다. 

 

6. 적용


제가 만든 앱 내부에서 사용되고 있는 코드입니다. 이렇게 Build pattern으로 적용하므로 chain 형식으로 메서드를 걸어줄 수 있습니다.  결과를 분석해보면 먼저 load를 통해 제가 원하는 리소스를 셋팅합니다. 이후 해시키를 수정된 날짜 값을 섞어 캐시를 무효화합니다. 또한 로딩되는 데이터들은 캐시에 저장되지 않도록 skipMemoryCache메서드와 diskCacheStrategy메서드를 통해 셋팅합니다.  마무리로 로딩될 이미지를 원형으로 만들어 이미지뷰에 셋팅해서 마무리합니다. 

'android' 카테고리의 다른 글

2021 네이버웍스 인턴 후기  (3) 2021.09.13
코루틴이란?  (2) 2021.04.29
리싸이클러뷰 멀티 뷰타입 사용해보기  (0) 2021.01.10
recyclerView와 dataBinding 같이 사용하기  (1) 2021.01.03
Observer pattern 구조 및 사용  (0) 2020.12.27