Coil:Kotlin-first的Android图片加载库

Coil是Android平台上又一个开源的图片加载库,尽管Android平台已经有诸如Picasso,Glide以及Fresco等很是成熟且优秀的图片加载库了,但Coil最主要的特点就是融合了当下Android开发界最主流的技术和趋势,采用Kotlin为开发语言,将协程、OKHttp、OKIO和AndroidX做为一等公民,以期打形成一个更加轻快、现代化的图片加载库。具体而言包含如下几个方面:android

  • 发挥Kotlin的语言特性,利用扩展函数、内联、lambda参数以及密封类来建立简单优雅的API。
  • 利用了Kotlin协程强大的 可取消的非阻塞式异步编程和对线程最大化利用的特性。
  • 使用现代化的依赖库:OKHttp、OKIO基本上已是目前大部分app的事实“标准”库,它们强大的特性让Coil避免了重复实现磁盘缓存和缓冲流;相似的,AndroidX-LifeCycle也是官方推荐的,Coil目前是惟一一个对其支持的图片加载库。
  • 轻量:Coil项目的代码量几乎只有Glide的1/8,更是远远小于Fresco;而且对APK仅增长了大约1500个方法(对于那些已经依赖的OKHttp和协程的app来讲),和Picasso至关并显著低于Glide和Fresco。
  • 支持扩展:Coil的image-pipline主要由 Mappers , Fetchers , 和 Decoders 三个类组成,能够方便地用于自定义:扩展或覆盖默认行为,或增长对新的文件类型的支持。
  • 测试友好化:Coil的基础服务类是 ClassLoader ,它是一个接口,能够方便地编写对应的实现类进行测试;而且Coil同时提供了单例和非单例对象来支持依赖注入。
  • 没有annotation processing:annotation processing通常会下降编译速度,Coil经过Kotlin扩展函数来避免。

Coil目前支持其它图片加载库所包含的全部功能,除此以外它还有一个独特的特性:动态采样(Dynamic image sampling),简而言之就是能够在内存中只缓存了一个低质量的图片而此时须要显示同一个高质量的图片时,Coil能够先把低质量的图片做为 ImageView 的 placeHolder 并同时去磁盘缓存中读取对应的高质量图片最后以“渐进式”的方式替换并最终显示到视图中,例如最多见的从图片列表到预览大图的场景。
以上就是Coil目前的大体介绍,下面咱们对Coil的API进行一个简单的使用预览和介绍。git

API预览

// 加载一个基本的url(利用了扩展函数,对target无任何侵入)
imageView.load("https://www.website.com/image.jpg")

// Coil 支持加载 urls, uris, resources, drawables, bitmaps, files 等等
imageView.load(R.drawable.image)
imageView.load(File("/path/to/image.jpg"))
imageView.load(Uri.parse("content://com.android.externalstorage/image.jpg"))

// Requests的配置项能够经过load的lambda参数方式实现
imageView.load("https://www.website.com/image.jpg") {
    crossfade(true)
    placeholder(R.drawable.image)
    transformations(CircleCropTransformation())
}

// 自定义targets,包含开始、成功和失败的回调 
Coil.load(context, "https://www.website.com/image.jpg") {
    target { drawable ->
        // Handle the successful result.
    }
}

// 经过使用挂起函数get来直接获取图片对象
val drawable = Coil.get("https://www.website.com/image.jpg")
复制代码

仓库地址

看到这里是否是以为耳目一新,已经火烧眉毛地想开始学习和使用了,那就直接到Coil的GitHub地址了解更多吧:github.com/coil-kt/coi…github

相关文章
相关标签/搜索