使用协程+Coil获取Bitmap与其他方式对比

1,841 阅读1分钟

使用HttpURLConnection同步获取Bitmap,当然还有异步、Glide等方式

var bitmap: Bitmap?
            var imageURL: URL? = null
            try {
                imageURL = URL(url)
            } catch (e: MalformedURLException) {
                e.printStackTrace()
            }
            thread {
                try {
                    val conn: HttpURLConnection = imageURL?.openConnection() as HttpURLConnection
                    conn.doInput = true
                    conn.connect()
                    val `is`: InputStream = conn.inputStream
                    bitmap = BitmapFactory.decodeStream(`is`)
                    Handler(Looper.getMainLooper()).post {
                        listener.bitmapLoadSuccess(bitmap)
                    }
                    `is`.close()
                } catch (e: Exception) {
                    e.printStackTrace()
                }
            }

使用协程+Coil图片库

package com.community.mobile.utils

import android.content.Context
import android.graphics.Bitmap
import androidx.core.graphics.drawable.toBitmap
import coil.imageLoader
import coil.request.ImageRequest
import com.safframework.log.L
import kotlinx.coroutines.*

class ImageUtils{
    companion object{

        /**
         * 通过url获取Bitmap
         */
        fun getBitmap(context: Context, url: String?, listener: BitmapLoadListener) {

            val request = ImageRequest.Builder(context)
                .data(url)
                .build()

            GlobalScope.launch(Dispatchers.Main) {
                val drawable = context.imageLoader.execute(request).drawable
                L.d("ImageUtils", Thread.currentThread().name)
                listener.bitmapLoadSuccess(drawable?.toBitmap(500, 500))
            }
        }
    }

    interface BitmapLoadListener{
        fun bitmapLoadSuccess(bitmap: Bitmap?)
    }
}
  • 发现代码还是挺少的 主要是线程切换一行代码就实现了