天天看点

简述ImageLoader显示图片的流程

分析 displayImage()流程

1.传入的参数有url,options,targetSize,listeneer还有ImageView;

2.健壮性判断。判断:

  • ImageView是否为空;
  • options是否为空,如果为空,则产生默认配置。
  • 判断Url是否为空

3.如果url为空,则通过listener回调相应的方法()。并根据options来这是相应的Image图片。

4.如果url不为空,则:

  • 制定TagetSize,根据配置信息;
  • 根据TagetSize和Url生成一个key,去获取缓存中的bitmap对象;

5.如果bitmap对象不对空,且没有被复用,则是根据options的参数做善后处理;

  • 如果options.shouldPostProcess()为false,则将缓存中bitmap拿到,并且通过options的displayer进行展示,listener进行回调。
  • 如果需要做处理,则将相应的数据封装成ImageLoadingInfo对象,去处理加载展示任务。并且根据options分为同步和异步;处理是调用了options里面封装的processor进行处理,处理之后再将数据显示。

6.如果bitmap为空,

  • 根据options的配置,做一个Loading状态的显示
  • 根据每一个Url都有一个同步锁,在同步锁内,再次去检查内存中是否有缓存;如果没有去磁盘中做检查,如果磁盘中有,将其进行编码成bitmap
  • 如果bitmap为空,则进行网络请求,网络请求是通过config中定义的下载器,将图片缓存到磁盘中。进行磁盘中的拿到内存中,进行参数配置,成bitmap
  • 显示bitmap。