【奇技淫巧】新的图片加载库,android实战开发

本文介绍了Android开发中Coil库的使用,包括图片加载、请求配置、预加载和取消请求等功能。Coil是一个强大的图片加载库,支持多种数据类型,提供了内存管理和缓存策略。此外,文章还探讨了Android开发者除Flutter外还需要掌握的技术领域。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

// 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()
}
}

调用 Coil.setImageLoader

val imageLoader = ImageLoader.Builder(context)
.crossfade(true)
.okHttpClient {
OkHttpClient.Builder()
.cache(CoilUtils.createDefaultCache(context))
.build()
}
.build()
Coil.setImageLoader(imageLoader)

默认的 ImageLoader 可以通过这样取回

val imageLoader = Coil.imageLoader(context)

设置默认的 ImageLoader 是可选的。 如果未设置,则 Coil 会延迟创建具有默认值的 ImageLoader

如果您使用的是 io.coil-kt:coil-base,您应创建自己的 ImageLoader 实例并通过依赖注入将它注入到 app 中

注意:如果设置自定义OkHttpClient,则必须设置缓存实现,否则ImageLoader将没有磁盘缓存。 可以使用CoilUtils.createDefaultCache 创建默认的 Coil 缓存实例

支持的数据类型

ImageLoader 支持的数据类型为

  • String (mapped to a Uri)
  • HttpUrl
  • Uri (android.resource, content, file, http, and https schemes only)
  • File
  • @DrawableRes Int
  • Drawable
  • Bitmap

预加载

如果要预加载到内存中,执行一个不带 target 的 LoadRequest

val request = LoadRequest.Builder(context)
.data(“https://www.example.com/image.jpg”)
// 可选的,但是设置 ViewSizeResolver 可以通过限制预加载的大小来节省内存
.size(ViewSizeResolver(imageView))
.build()
imageLoader.execute(request)

如果只想将网络图片预加载到磁盘中,可以为 request 关闭内存缓存

val request = LoadRequest.Builder(context)
.data(“https://www.example.com/image.jpg”)
.memoryCachePolicy(CachePolicy.DISABLED)
.build()
imageLoader.execute(request)

取消请求

LoadRequest 会自动取消在以下几种情况下

  • 关联的 view detached,

  • 关联的 lifecycle destroyed

  • 另一个 request 在相同的 view 中开启

Android开发除了flutter还有什么是必须掌握的吗?

相信大多数从事Android开发的朋友们越来越发现,找工作越来越难了,面试的要求越来越高了

除了基础扎实的java知识,数据结构算法,设计模式还要求会底层源码,NDK技术,性能调优,还有会些小程序和跨平台,比如说flutter,以思维脑图的方式展示在下图;

点击文档前往获取面试资料与视频教程;【阿里P7级别Android架构师技术脑图+全套视频】

roid%E5%BC%80%E5%8F%91%E4%B8%8D%E4%BC%9A%E8%BF%99%E4%BA%9B%EF%BC%9F%E5%A6%82%E4%BD%95%E9%9D%A2%E8%AF%95%E6%8B%BF%E9%AB%98%E8%96%AA%EF%BC%81.md)**

[外链图片转存中…(img-nweIZNqd-1644046614603)]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值