【奇技淫巧】新的图片加载库,安卓移动开发背景换色

  • 快速:Coil 进行了很多优化,包括内存和磁盘缓存,对内存中的图像进行采样,重新使用位图,自动暂停/取消请求等等
  • 轻量:Coil 在您的APK中添加了约 2000 种方法(对于已经使用 OkHttpCoroutines 的应用程序),与 Picasso 相当,远少于 GlideFresco
  • 易用:Coil 的 API 利用 Kotlin 的特性简化了样板代码
  • 现代:CoilKotlin-first,使用现代化的库,例如 Coroutines, OkHttp, Okio, 以及 AndroidX Lifecycles

Coil 是以下名称的缩写:Coroutine Image Loader

Artifacts

Coil 拥有 5 个 artifact 并发布在 mavenCentral()

  • io.coil-kt:coil:依赖于 io.coil-kt:coil-base 并且包含了 Coil 的单例和 ImageView.load 的扩展函数
  • io.coil-kt:coil-base:base 库,不包含 Coil 的单例和 ImageView.load 的扩展函数,如果使用依赖注入,则可以使用该库
  • io.coil-kt:coil-gif:引入一系列解码器以支持解码 gif
  • io.coil-kt:coil-svg:引入一系列解码器以支持 svg
  • io.coil-kt:coil-video:包括两个 fetchers ,以支持从 Android 支持的任何视频格式中提取和解码帧

// 普通使用引用
implementation “io.coil-kt:coil:0.11.0”
// 使用依赖注入时或者制作基于 coil 的库引用
implementation “io.coil-kt:coil-base:0.11.0”

Java 8

Coil 要求 Java 8,要通过 D8 启用 Java 8 调试,请将以下内容添加到 Gradle 脚本

Gradle (.gradle)

android {
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}

tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).all {
kotlinOptions {
jvmTarget = “1.8”
}
}

Gradle Kotlin DSL (.gradle.kts)

android {
compileOptions {
sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8
}
}

tasks.withType {
kotlinOptions {
jvmTarget = “1.8”
}
}

使用

ImageView 扩展函数

io.coil-kt:coil 提供了 类型安全的 ImageView 扩展函数

在 ImageView 中加载图片,只需调用 load 扩展函数

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

// Resource
imageView.load(R.drawable.image)

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

// And more…

上面的请求等价于:

val imageLoader = Coil.imageLoader(context)
val request = LoadRequest.Builder(imageView.context)
.data(“https://www.example.com/image.jpg”)
.target(imageView)
.build()
imageLoader.execute(request)

可选的请求配置可以通过 lambda 来操作

imageView.load(“https://www.example.com/image.jpg”) {
crossfade(true)
placeholder(R.drawable.image)
transformations(CircleCropTransformation())
}

Image Loaders

ImageLoader 是执行请求的服务类。 他们处理缓存,数据获取,图像解码,请求管理,bitmap pool,内存管理等。 可以使用 builder 来创建和配置新实例:

val imageLoader = ImageLoader.Builder(context)
.availableMemoryPercentage(0.25)
.crossfade(true)
.build()

imageView.load 使用单例 ImageLoader 执行 LoadRequest 。 可以使用以下方式访问单例 ImageLoader

val imageLoader = Coil.imageLoader(context)

(可选)您可以创建自己的ImageLoader实例,并通过依赖项注入将它们注入:

val imageLoader = ImageLoader(context)

当您创建单个 ImageLoader 并在整个应用程序*享时,Coil 的性能最佳。 这是因为每个 ImageLoader 都有自己的内存缓存,bitmap pool 和网络监听

Requests

有两种 Request 类型

如果要加载到自定义 target 中,可以执行 LoadRequest

val request = LoadRequest.Builder(context)
.data(“https://www.example.com/image.jpg”)
.target { drawable ->
// Handle the result.
}
.build()
imageLoader.execute(request)

要强制获取图像,请执行GetRequest:

val request = GetRequest.Builder(context)
.data(“https://www.example.com/image.jpg”)
.build()
val drawable = imageLoader.execute(request).drawable

单例

如果您使用的是 io.coil-kt:coil ,您可以使用以下任意方式设置 ImageLoader 的实例

在 Application 中实现 ImageLoaderFactory(推荐)

class MyApplication : Application(), ImageLoaderFactory {

override fun newImageLoader(): ImageLoader {
return ImageLoader.Builder(context)
.crossfade(true)
.okHttpClient {
OkHttpClient.Builder()
.cache(CoilUtils.createDefaultCache(context))
.build()
}
.build()
}
}

架构师筑基包括哪些内容

我花了将近半个月时间将:深入 Java 泛型.、注解深入浅出、并发编程.、数据传输与序列化、Java 虚拟机原理、反射与类加载、高效 IO、Kotlin项目实战等等Android架构师筑基必备技能整合成了一套系统知识笔记PDF,相信看完这份文档,你将会对这些Android架构师筑基必备技能有着更深入、更系统的理解。

由于文档内容过多,为了避免影响到大家的阅读体验,在此只以截图展示部分内容,详细完整版的【架构师筑基必备技能】文档领取方式:点赞+关注,然后私信关键词 【666】即可获得免费领取方式!或者 可以查看我的【Github

注:资料与上面思维导图一起看会更容易学习哦!每个点每个细节分支,都有对应的目录内容与知识点!

【奇技淫巧】新的图片加载库,安卓移动开发背景换色
【奇技淫巧】新的图片加载库,安卓移动开发背景换色
%95%E6%8B%BF%E9%AB%98%E8%96%AA%EF%BC%81.md)】**

注:资料与上面思维导图一起看会更容易学习哦!每个点每个细节分支,都有对应的目录内容与知识点!

[外链图片转存中…(img-8rbk9V5n-1646146041626)]
[外链图片转存中…(img-zztM3Fn6-1646146041627)]
这份资料就包含了所有Android初级架构师所需的所有知识!需要的可以在我的GIthub里面去查看!

上一篇:Jmeter性能测试2


下一篇:setInterval