分析 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。