Android-Universal-Image-Loader框架图片的缓存
1,下载框架的github地址https://github.com/dodola/Android-Universal-Image-Loader
2,分析demo,把 universal-image-loader-1.8.4-with-sources.jar 导入项目
3,初始化(在Application中,或者在baseActivity中)
/**
* 实例化图片处理框架imageloder
*/
ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(getApplicationContext())
.threadPriority(Thread.NORM_PRIORITY - 2)
.denyCacheImageMultipleSizesInMemory()
.discCacheFileNameGenerator(new Md5FileNameGenerator())
.tasksProcessingOrder(QueueProcessingType.LIFO)
.enableLogging() // Not necessary in common
.discCache(new UnlimitedDiscCache(new File(Environment.getExternalStorageDirectory(), "karnetimg")))
.build();
ImageLoader.getInstance().init(config);
4,使用的时候(如:adapater中)
public DisplayImageOptions options;//图片配置
protected ImageLoader imageLoader = ImageLoader.getInstance();
//oncreate方法中配置参数
/**
* 配置图片设置
*/
options = new DisplayImageOptions.Builder()
.showStubImage(R.drawable.iv_male)
.showImageForEmptyUri(R.drawable.iv_male)
.showImageOnFail(R.drawable.iv_male)
.cacheInMemory()
.cacheOnDisc()
.displayer(new RoundedBitmapDisplayer(180))
.build();
//getview中使用
user_img = (ImageView) view.findViewById(R.id.user_img);
imageLoader.displayImage(Urls.URL_HOST+listCarRouters.get(position).getUserImg().replace("/",""), user_img, options, null);
最后的参数是一个下载监听器,我这里为了方便传null
private ImageLoadingListener animateFirstListener = new AnimateFirstDisplayListener();
可以在监听其中设置下载开始->结束的动画操作
此框架很好用,对图片处理的逻辑非常缜密,想了解的请看源码。
主要逻辑是:
下载过程:首先拿url去判断内存和SD卡中有木有(内存中是单纯的url地址,SD卡中使用了hashcode转码)----->没有就开启线程下载----->缓存到SD卡
取图片过程:拿url去判断内存和SD中有没有---->没有则去网络下载
对于SD卡路径,要注意:设置SD卡保存的路径的要是SD卡的全路径,不能创建的路径,框架会判断使用默认的路径保存
看似简单的流程,框架中对其做了很详细的判断逻辑。
在此感谢发明家,和我一起4个小时的努力去分析这个框架,不得不说外国佬代码写的还是很不错滴!
我为自己写博客!!!