ImageLoader调用过程

1、使用方法





以下是源码

2、如何displayImage

①将imageview转换成ImageViewAware来实现的


②主要是对ImageView进行了封装,并将其强引用改为了弱引用,当内存不足的时候,可以对其进行回收


③获取imageview的宽、高,以便于对其进行裁剪


④displayImage最终的方法



checkConfiguration()方法进行了一些初始化的操作




ImageEngine里面封装了一个hashmap,说明imageview将所有的属性都添加到了hashmap中




如果url为空,engine.cancledisplaytaskfor方法从内存中移除掉这些属性

如果需要显示,则将这些属性配置到imageAware上

否则,将imageAware置为null

并通知这次任务已经完成了




最后又通过LoadAndDisplayImageTask进行加载显示



⑤defineTargetSizeForView:将imageview封装成ImageSize对象


获取imagesize之后,就从内存中获取该图片,默认使用的lru算法

shouldPostProcess:是否需要对图片进行后期处理




3、

①LoadAndDisplayImageTask实际上是一个runnable,开启子线程去执行




waitIfPaused()  方法主要是滑动的时候不去加载,主要是用到的listener

engine.getPause():获取了一个锁



如果view被回收或重用了,则不会去加载




短时间内,listviewitem 滚出滚入的时候进行的判断,防止频繁加载图片引起性能上的消耗




根据url从内存中获取图片,如果没有从磁盘或网络上加载图片,调用tryLoadBitmap方法




根据url从磁盘上获取图片,如果有则decodeImage,如果没有则从网络上获取




tryCacheImageOnDisk():试着去获取磁盘上的文件,如果为空,通过downloadImage从网络上获取图片,并通过resiezeAndSaveImage方法保存图片




在磁盘缓存和内存缓存中保存下来



如果图片已经保存在内存缓存和磁盘缓存中了,就需要通过displaybitmaptask对其进行bitmap处理




DisplayBitmapTask就是一个Runnable,看一下它的run方法



主要看其run方法,判断其是否被回收了、是否被取消了,如果是,则调用cancel方法,如果不是,则调用displayer这个类的display方法,把bitmap显示出来。

最后调用listener的.onLoadingComplete方法告诉调用者整个imageview已经加载完成


4、

5、

6、

7、

8、

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值