Android 图片加载缓存库 Picasso 的故事二

之前说了Picasso的使用方式,今天我们一起来看下怎么自己写一个类似Picasso的图片加载缓存库。
一、缓存

Lrucacha,主要是get和set方法,采用了LinkedHashMap的存贮结构。
this.map = new LinkedHashMap<String, Bitmap>(0, 0.75f, true);

这个true是判断是否缓存区已满,满了就清除使用最少的图片。

二、操作封装
Request,记录对图形的操作。
需要实现Transformation里bitmap转换接口。封装后request会传给action。
三、具体的加载任务
Action,图片加载后的接口回调。
两个抽象方法,complete和error,主要是图片解析成Bitmap后用户需要做什么。
四、图片的加载与异步解析
BitmapHunter, BitmapHunter是一个Runnable,其中有一个decode的抽象方法.
decode,用于子类实现不同类型资源的解析。

decode生成原始bitmap,做需要的转换transformResult和applyCustomTransformations。结果传递到上层dispatcher.dispatchComplete(this)。

五、任务调度
Dispatcher,任务调度器
Dispatcher内有一个HandlerThread,所有的请求都会通过这个thread异步转换,外部调用的是dispatch方法,然后通过handler将请求转换到对应的perform方法。

在Picasso.with()的时候会将执行所需的所有必备元素创建出来,如缓存cache、执行executorService、调度dispatch等,在load()时创建Request,在into()中创建action、bitmapHunter,以后就会调用dispather的dispatchSubmit()来请求执行,handler接到消息后转换到performSubmit方法,这里将通过action得到具体的BitmapHunder,然后交给ExecutorService执行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值