Android -Compose 的 图片加载框架coli的源码详解

Coli的源码

Coli的使用

引入依赖

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

基本使用

// 图片资源 model --- Any 可以时 网络资源 图片url 和  本地资源drawable等  
AsyncImage(model = "图片地址url" , contentDescription ="无障碍图片描述" )

AsyncImage

点击方法
源码1

requestOf

我们可以点进model相关的 requestOf(model) 看他是如何处理
处理Model
如果是ImageRequest 直接返回model。 防止多次重复加载
不是ImageRequest。返回new ImageRequest一个对象。
我们点进ImageRequest.Builder(LocalContext.current)中的 Builder()方法,这里是初始化一系列请求参数,返回参数,图片相关的(大小,modify相关等)以便于后面 网络操作还是本地资源获取图片设置的初始化参数
Builder
所以这里将 图片信息放到ImageRequest 对象中。

updateRequest

updateRequest
将图片大小和ImageRequest的信息 保存到 ImageRequest中

rememberAsyncImagePainter

点进 rememberAsyncImagePainter方法
rememberAsnycImagePainter
requestOf是我们刚刚看过的方法 将model 数据 传入
在这里插入图片描述
当没有build的 时候 。ImageRequest 刚创建的对象。 抛出异常

AsyncImagePainter

用于图片获取 等一系列的动作的对象

onRemembered()

onRemembered
这里我们看到 异步获取操作。scope.launch{}
这里是通过ImageLoader去加载 图片的

ImageLoader

点进execute 方法

execute

execute
将执行结果同步到主线程
点进 executeMain

executeMain

前部分是 获取请求,创建回调,设置图片转成Bitmap等一系列参数
在这里插入图片描述

这一部分是具体
在这里插入图片描述
result 为具体的操作。
RealInterceptorChain中的 interceptors
点进去
在这里插入图片描述
我们能看到创建了 components对象

这个对象 有一系列的 获取图片资源框架
mapper:请求头
key : 是文件还是
fetcher : 获取数据
decoders :生成图片

网络获取图片 —三级缓存

HttpUriFetcher获取图片
点进去看fetch()看获取逻辑
网络获取图片
分析出来有资源
第一个 if 语句 第一次从在内存缓存中有 图片信息 metadata 返回
第二个 if 语句 第二次从内存卡Sdcard 中获取
下面esle 是从 第三次没有从网络缓存中获取 图片
下面 else 创建新的网络请求

网络请求
网络请求后的操作。

点进executeMain 中的 result 的 队列request 的 proceed()

process
点进 interceptors的intercept方法

在这里插入图片描述
缓存相关的 1,2,3级缓存具体操作
我们找到网络相关的

val result = execute(request, mappedData, options, eventListener)

点进去execute
在这里插入图片描述
找到fetch()对应着图片各种获取的资源的方法

总结:
根glide 类似,但是是基于compose+kotlin实现的。
最核心的类是 RealImageLoader 。

Fetcher:获取资源的基类
RealImageLoader :调度图片资源获取 + 图片转成Bitmap(资源转换)
Mapper<HttpUrl, String>:请求头
Decoders:图片转换

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值