分析图片动态加载框架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());