分析图片动态加载框架universalimageloader - gmtalang/test GitHub Wiki

优点:

ImageAware是用来显示处理的,可以被复用也可以被垃圾回收 ImageDecodingInfo里面涉及到BitmapFactory里面的inBitmap是否可被重复利用,重复利用的话可以返回bitmap,不能重复利用返回null

ImageDownloader来自不同的下载源,需要重载getStream BitmapProcess针对图片的处理 硬盘缓存两种方式: 无限空间硬盘缓存UnLimitedDiskCache 时间寿命硬盘缓存LimitedAgeDiskCache

(1) RequestManager:请求生成和管理模块 (2) Engine:引擎部分,负责创建任务(获取数据),并调度执行 (3) GetDataInterface:数据获取接口,负责从各个数据源获取数据。 比如 MemoryCache 从内存缓存获取数据、DiskCache 从本地缓存获取数据,下载器从网络获取数据等。 (4) Displayer:资源(图片)显示器,用于显示或操作资源。 比如 ImageView,这几个图片缓存都不仅仅支持 ImageView,同时支持其他 View 以及虚拟的 Displayer 概念。 (5) Processor 资源(图片)处理器 负责处理资源,比如旋转、压缩、截取等。

以上概念的称呼在不同图片缓存中可能不同,比如 Displayer 在 ImageLoader 中叫做 ImageAware,在 Picasso 和 Glide 中叫做 Target。 遇到的问题:

  • MyImageLoader.getInstance(mContext).loadImage(holder.birthImg, cvb.getBirthcardImg());

  • dd = MyImageLoader.getInstance(mContext).getImage(cvb.getBirthcardImg());

  • 在listview 的adapter中,第一次进入列表的时候,dd获取到的值是空的,但当你刷新列表的时候dd却能正常获取到。我发现只有当列表重新 刷新后调用getImage才能获取到你想要的值,否则你获取到的只是空值。
    

*** 解决办法:**

  •  当 dd 获取的值是空的时候,我们需要去重新刷新一次列表
    
  •         if (dd == null) {
    
  •             notifyDataSetChanged();
    
  •         }
    
  •         dd = MyImageLoader.getInstance(mContext).getImage(cvb.getBirthcardImg());