Android-Universal-Image-Loader最新框架解析
来源:互联网 发布:fifa online3数据库cc 编辑:程序博客网 时间:2024/05/16 12:12
博客源址:http://www.open-open.com/lib/view/open1433940304473.html
Android-Universal-Image-Loader(对应版本号1.9.4为最新版)
原文作者:顾学武
编辑整理:快码众包
目录
1.个性的ImageLoader配置
1.1.在哪儿配置以及如何配置
2.各式缓存方式任你选择
2.1.DiskCache 磁盘缓存
2.2.MemoryCache内存缓存
2.3.不要忘记缓存的清理
3.网络图片获取想停就停
4. 图像大小由你控制
5. 注意事项
6.下载地址
1.个性的ImageLoader配置
1.1.在哪儿配置以及如何配置
一般会在自己的Application子类的onCreate()方法中对ImageLoader进行配置
(1) ImageLoaderConfiguration各属性解释
l 偷懒点可以直接使用缺省的配置ImageLoaderConfiguration:
ImageLoaderConfiguration configuration = ImageLoaderConfiguration.createDefault(this);
l 也可以自定义ImageLoaderConfiguration:
ImageLoaderConfiguration类Field详解:
Filed名称Filed意义缺省默认值Builder中设置方法Int maxImageWidthForMemoryCacheInt maxImageHeightForMemoryCache内存缓存图片的最大宽高屏幕的宽高度memoryCacheExtraOptions(…)Int maxImageWidthForDiskCacheInt maxImageHeightForDiskCache磁盘缓存图片的最大宽高0,0discCacheExtraOptions(…)或者diskCacheExtraOptions(…)BitmapProcessor processorForDiskCache图片处理器,负责从磁盘缓存读取或写入前对图片进行处理nulldiscCacheExtraOptions(…)或者diskCacheExtraOptions(…)Executor taskExecutor缓存线程池DefaultConfigurationFactory.createExecutor(…);taskExecutor(…)Executor taskExecutorForCachedImages下载缓存图片的线程池DefaultConfigurationFactory.createExecutor(…);taskExecutorForCachedImages(…)Boolean customExecutor是否自定义线程池false无Boolean customExecutorForCachedImages是否自定义下载缓存图片的线程池false无Int threadPoolSize线程池数3threadPoolSize(…)Int threadPriority线程优先级Thread.NORM_PRIORITY – 2threadPriority(…)QueueProcessingType tasksProcessingType片下载和显示的工作队列排序QueueProcessingType.FIFOtasksProcessingOrder(…)MemoryCache memoryCache指定内存缓存的实现DefaultConfigurationFactory.createMemoryCache(…)memoryCache(…)DiskCache diskCache指定磁盘缓存的实现DefaultConfigurationFactory.createDiskCache(…);discCache(…)或者 diskCache(…)ImageDownloader downloader图片下载器,负责从图片的各个来源获取输入流imageDownloader(…)DefaultConfigurationFactory.createImageDownloader(context);ImageDecoder decoder图片解码器,负责将图片输入流InputStream转换为Bitmap对象DefaultConfigurationFactory.createImageDecoder(writeLogs);imageDecoder(…)DisplayImageOptions defaultDisplayImageOptions;缺省的图片显示的配置项DisplayImageOptions.createSimple();defaultDisplayImageOptions(…)ImageDownloader networkDeniedDownloader不允许访问网络的图片下载器networkDeniedDownloader = new NetworkDeniedImageDownloader(downloader);无ImageDownloader slowNetworkDownloader慢网络情况下的图片下载器slowNetworkDownloader = new SlowNetworkImageDownloader(downloader);无(2) DisplayImageOptions各属性解释
l 创建默认的DisplayImageOptions:
DisplayImageOptions option_0 = DisplayImageOptions.createSimple();
l 也可以自定义DisplayImageOptions:
DisplayImageOptions类Field详解
Filed名称Field意义缺省默认值Builder中设置方法int imageResOnLoadingDrawable imageOnLoading图片下载期间显示的图片0showStubImage(…)或者showImageOnLoading(…)int imageResForEmptyUriDrawable imageForEmptyUri空 uri 时的占位图片0showImageForEmptyUri(…)int imageResOnFailDrawable imageOnFail图片下载失败时展示图片showImageOnFail(…)boolean resetViewBeforeLoading在加载前是否重置 viewfalseresetViewBeforeLoading()或者resetViewBeforeLoading(…)boolean cacheInMemory是否启用内存缓存falsecacheInMemory()或者cacheInMemory(…)boolean cacheOnDisk是否启用磁盘缓存falsecacheOnDisc()或者cacheOnDisc(…)
或者cacheOnDisk(…)
ImageScaleType imageScaleType图片的缩放类型ImageScaleType.IN_SAMPLE_POWER_OF_2imageScaleType(ImageScaleType imageScaleTy)Options decodingOptions为 BitmapFactory.Options,用于BitmapFactory.decodeStream(imageStream, null, decodingOptions)得到图片尺寸等信息Options decodingOptions = new Options();bitmapConfig(Bitmap.Config bitmapConfig)decodingOptions(Options decodingOptions)int delayBeforeLoading设置在开始加载前的延迟时间,单位为毫秒0delayBeforeLoading(int delayInMillis)boolean considerExifParams是否考虑图片的 EXIF 信息(括机身、镜头型号、拍摄时间、相机快门次数)falseconsiderExifParams(…)Object extraForDownloader下载器需要的辅助信息nullextraForDownloader(Object extra)BitmapProcessor preProcessor缓存在内存之前的处理程序nullpreProcessor(…)BitmapProcessor postProcessor缓存在内存之后的处理程序nullpostProcessor(…)BitmapDisplayer displayer图片的显示方式DefaultConfigurationFactory.createBitmapDisplayer();displayer(…)Handler handlerhandler 对象,消息处理nullhandler(…)boolean isSyncLoading是否同步加载falsesyncLoading(…)(3) 自定义配置总结:
1) Imageloader提供的缺省的ImageLoaderConfiguration和缺省的DisplayImageOptions已经基本可以满足我们正常的需求,如果没有特殊的需要可以不用再修改;2) ImageLoaderConfiguration的Builder中的diskCache()方法, diskCacheSize() 方法以及diskCacheFileCount()方法彼此功能重叠的,如果设置了其中一个,就不要再设置其他的了;3) ImageLoaderConfiguration的Builder中的diskCache()方法 和 diskCacheFileNameGenerator()方法彼此功能重叠的,如果设置了其中一个,就不要再设置其他的了;
4) ImageLoaderConfiguration的Builder中的memoryCache() 方法和memoryCacheSize()方法 彼此功能重叠的,如果设置了其中一个,就不要再设置其他的了。
1.2.补充理解:三大关键对象关系
1) ImageLoader:
具体下载图片,缓存图片,显示图片的具体执行类,它有两个具体的方法displayImage(…)、loadImage(…),但是其实最终他们的实现都是displayImage(…)
2) ImageLoaderConfiguration:
图片缓存的全局配置,主要有线程类、缓存大小、磁盘大小、图片下载与解析、日志方面的配置
3) DisplayImageOptions:
指导每一个Imageloader根据网络图片的状态(空白、下载错误、正在下载)显示对应的图片,是否将缓存加载到磁盘上,下载完后对图片进行怎么样的处理
4) 三者关系的形象比喻:
这三者就像是公司执行机构、公司规章制度以及客户需求,ImageLoaderConfiguration就像一个公司的规章制度,里面规定了一个公司全局性的性质;ImageLoader就像是一个公司的执行机构,会给客户创造出客户想要的产品;DisplayImageOptions就像是每一个客户的具体需求,公司执行结构会根据这个需求最终决定如何生产那个产品。
2.各式缓存方式任你选择
2.1.DiskCache 磁盘缓存
1) UnlimitedDiscCache不限制缓存大小;2) UnlimitedDiscCache很简单它只是简单的继承了BaseDiscCache并未对BaseDiscCache做任何扩展;3) LimitedAgeDiscCache限制缓存时间;
4) LimitedAgeDiscCache该类实现了在缓存中删除被加载超过规定时间的文件:满足以下条件的时候就从缓存中删除文件:系统当前时间-文件的最新修改时间 > maxFileAge;
2.2.MemoryCache内存缓存
1) 通过实现接口MemoryCacheAware <String,Bitmap>来实现自己的缓存
2) UsingFreqLimitedCache (最少被用到的对象会被删除)
3) UsingAgeLimitedCache (最早被添加的对象会被删除)
4) LargestLimitedCache (空间占用最大的对象会被删除)
5) FIFOLimitedCache (根据先进先出的原则上删除多余对象)
2.3.不要忘记缓存的清理一般要在整个应用结束的时候调用下面两个方法,分别情况内存缓存和磁盘缓存,提高用户体验 :
i. imageLoader.clearMemoryCache();
ii. imageLoader.clearDiskCache();
3. 网络图片获取想停就停
主要是用于GirdView,ListView加载图片的情况,因为这两个控件展示图片的时候会出现滑动操作,为了更友好的用户体验,可以设置GirdView,ListView的setOnScrollListener监听事件。
listView.setOnScrollListener(new PauseOnScrollListener(imageLoader, pauseOnScroll, pauseOnFling));gridView.setOnScrollListener(new PauseOnScrollListener(imageLoader, pauseOnScroll, pauseOnFling));pauseOnScroll—是否在滑动过程中停止加载图片
pauseOnFling—是否在快速猛的滑动中停止加载图片
4.图像大小由你控制
在ImageLoadingListener接口有以下几个状态监听,用于监听图片下载的不同状态:
1) onLoadingStarted(String imageUri, View view);2) onLoadingFailed(String imageUri, View view, FailReason failReason);3) onLoadingComplete(String imageUri, View view, Bitmap loadedImage):
在图片加载成功之后,可以对获取到的Bitmap进行各种大小设置,图形裁剪操作以及动画效果添加等,
最后再加图片展示到控件上。
4) onLoadingCancelled(String imageUri, View view)。
5.注意事项
使用了ImageLoader可以有效的避免程序加载图片出现OOM的情况,但是也不是百分之百的屏蔽这个问题,在有的时候,还是会出现,这个时候,我们 可以从下面几个思路去优化我们的ImageLoader
1) 减少配置之中线程池的大小,(.threadPoolSize).推荐1-5;2) 使用.bitmapConfig(Bitmap.config.RGB_565)代替ARGB_8888;3) 使用.imageScaleType(ImageScaleType.IN_SAMPLE_INT)或者 try.imageScaleType(ImageScaleType.EXACTLY);
4) 避免使用RoundedBitmapDisplayer.他会创建新的ARGB_8888格式的Bitmap对象;
5) 使用.memoryCache(new WeakMemoryCache()),不要使用.cacheInMemory();
6.下载地址:
https://github.com/nostra13/Android-Universal-Image-Loader
- Android-Universal-Image-Loader最新框架解析
- Android-Universal-Image-Loader最新框架解析
- Android-Universal-Image-Loader最新框架解析
- Android-Universal-Image-Loader最新框架解析
- Android-Universal-Image-Loader最新框架解析
- Android-Universal-Image-Loader最新框架解析
- Android-Universal-Image-Loader最新框架解析
- Android Universal-Image-Loader 解析
- Android 开源框架Universal-Image-Loader完全解析
- Android 开源框架Universal-Image-Loader完全解析
- Android 开源框架Universal-Image-Loader完全解析
- Android 开源框架Universal-Image-Loader完全解析
- Android 开源框架Universal-Image-Loader完全解析
- android 开源框架Universal-Image-Loader解析
- 图片加载框架Android-Universal-Image-Loader使用及解析
- android 开源框架Universal-Image-Loader解析
- Android 开源框架Universal-Image-Loader完全解析
- Android 开源框架Universal-Image-Loader完全解析
- CAAnimation
- Java并发编程:深入剖析ThreadLocal
- UVA10081 Tight Words(dp)
- JAVA 多线程--了解线程
- 仿射变换
- Android-Universal-Image-Loader最新框架解析
- 拓扑排序--输出
- VS2010bug 当生成或重新生成时,出现 不能复制文件(从obj\debug到bin\debug),文件正在被另一个进程使用的错误解决办法
- 动画
- ace 之 ACE_Message_Block
- 不养生反伤身的喝汤误区,看看你中了多少!!
- GCD
- 《高级语言程序设计实训》那些事
- 我的成长(四)---看书