Notice
Recent Posts
Recent Comments
Link
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

개발여행일지~

Glide VS Coil 차이점을 알아보자! 본문

코틀린 공부정리

Glide VS Coil 차이점을 알아보자!

야생돌고래 2023. 10. 16. 21:20

1. Coil은 뭐지??

Coil은 Coroutine Image Loader의 약자로 Kotlin Coroutine으로 만들어진 가벼운 Android 이미지 로딩 라이브러리입니다.

코일에서는 총 4가지 장점을 위주로 소개하고 있습니다.

  • Fast
    • 코일은 메모리 및 디스크 캐싱, 메모리의 이미지 downsampling, 자동 중지/취소 요청 등 다양한 최적화를 수행합니다
  • Lighweight
    • Coil은 2000개의 메서드를 APK(이미 OkHttp와 Coroutines를 사용하는 앱)에 추가합니다. 이는 Ficasso와 비슷하며 Glide와 Fresco보다 훨씬 작습니다
  • Easy to use
    • 코일의 API는 코틀린의 단순성과 최소한의 boilerplate으로 영향을 미친다
  • Modern
    • 코일은 Kotlin친화적이고 Coroutines, OkHttp, Okio, AndrodiX Lifecycles를 포함한 최신 라이브러리들을 사용합니다

2. Coil의 사용방법

Dependency 추가

앱 단위 build.gradle 파일에 다음 코드를 추가합니다.

implementation("io.coil-kt:coil:2.2.2")

 

이미지 불러오기

Glide보다 훨씬 간단하게 .load를 붙여주면 이미지 로딩이 됩니다.

// URL
imageView.load("https://www.example.com/image.jpg")

// File
imageView.load(File("/path/to/image.jpg"))

// And more...

 

3. Glide vs. Coil 메모리 사용량 비교

Glide 테스트코드

fun loadImageWithGlide(imageView: AppCompatImageView, imageUrl: String, funcName: String) {
        Log.d("ImageProcessTime", "$funcName glide 시작")
        val glideStartTime = System.currentTimeMillis()

        Glide.with(this)
            .load(imageUrl)
            .listener(object : RequestListener<Drawable> {
                override fun onLoadFailed(
                    e: GlideException?,
                    model: Any?,
                    target: Target<Drawable>?,
                    isFirstResource: Boolean,
                ): Boolean {
                    return false
                }

                override fun onResourceReady(
                    resource: Drawable?,
                    model: Any?,
                    target: Target<Drawable>?,
                    dataSource: DataSource?,
                    isFirstResource: Boolean,
                ): Boolean {

                    val glideEndTime = System.currentTimeMillis()
                    Log.d("ImageProcessTime", "$funcName processTime: ${(glideEndTime - glideStartTime) / 1000}")
//                    Log.d("check@@@", "${resource} ${model} ${target} ${dataSource} ${isFirstResource}")
                    return false
                }
            })
            .into(imageView)
    }

 

Coil 테스트코드

fun loadImageWithCoil(imageView: AppCompatImageView, imageUrl: String, funcName: String) {
        Log.d("ImageProcessTime", "$funcName Coil 시작")
        val coilStartTime = System.currentTimeMillis()

        imageView.load(imageUrl) {
            crossfade(true)
            listener { request, result ->
                val coilEndTime = System.currentTimeMillis()
                Log.d("ImageProcessTime", "$funcName processTime: ${(coilEndTime - coilStartTime) / 1000}")

            }
        }
    }