Universal-Image-Loader是目前Android主流的图片处理库框架之一,作者是白俄罗斯的Sergey Tarasevich。
在Android图片处理中需要考虑的问题很多,例如OOM、图片缓存和网络图片加载、多线程问题及图片压缩处理等等复杂的问题。但是Universal-ImageLoader已经帮我们把这些问题处理好了,对外提供了相应的完善的请求API,我们只需要按照要求使用即可。
一、Universal-Image-Loader特点:
(1)优点:
- 支持本地图片和网络图片的多线程异步加载和缓存处理
- 个性化的配置自己项目的ImageLoader
- 图片加载过程的监听回调
- 自动对加载的图片针对当前剩余内存进行裁剪优化,防止OOM
- 较好的控制图片的加载过程,例如暂停图片加载,重新开始加载图片
(2)缺点:
- 没有对本地文件压缩处理的相关API方法以及默认都是Src模式设置图片,没有针对Background属性开放API。
(以下内容来源于某培训机构,侵删)
二、ImageLoaderConfiguration(全局配置类)
生成一个ImageLoaderConfiguration的方法
ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(context).build();
设置下载图片的线程数量
.threadPoolSize(3)
设置内存缓存的机制!!!
.memoryCache(new LruMemoryCache(2 * 1024 * 1024))
设置内存缓存的最大值
.memoryCacheSize(2 * 1024 * 1024)
缓存到本地的目录
.diskCache(new UnlimitedDiscCache(cacheDir))
缓存到本地的最大使用空间
.diskCacheSize(50 * 1024 * 1024)
缓存到本地的最多文件数量
.diskCacheFileCount(100)
缓存到本地的文件的命名规则
.diskCacheFileNameGenerator(new HashCodeFileNameGenerator())
memoryCache,用来设置内存缓存的。
- LruMemoryCache 默认的缓存,使用lru算法(如果缓存的图片总量超过限定值,先删除最近使用最少的bitmap)
- UsingFreqLimitedMemoryCache(如果缓存的图片总量超过限定值,先删除使用频率最小的bitmap)
- LRULimitedMemoryCache(这个也是使用的lru算法,和LruMemoryCache不同的是,他缓存的是bitmap的弱引用)
- FIFOLimitedMemoryCache(先进先出的缓存策略,当超过设定值,先删除最先加入缓存的bitmap)
- LargestLimitedMemoryCache(当超过缓存限定值,先删除最大的bitmap对象)
- LimitedAgeMemoryCache(当 bitmap加入缓存中的时间超过我们设定的值,将其删除)
- WeakMemoryCache(使用弱引用缓存bitmap)
diskCache ,用来设置文件的缓存的
- FileCountLimitedDiscCache(超过最大值,删除掉最先加入到硬盘的文件)
- TotalSizeLimitedDiscCache(设定缓存文件最大值,删除最先加入到硬盘的文件)
- UnlimitedDiscCache(这个缓存类没有任何的限制)
三、DisplayImageOptions(显示配置类)
初始化方法
new DisplayImageOptions.Builder().build();
加载图片中,显示什么图片
showImageOnLoading
设置图片Uri为空或是错误的时候显示的图片
showImageForEmptyUri
设置图片加载或解码过程中发生错误显示的图片
showImageOnFail
设置下载的图片是否缓存在内存中
.cacheInMemory(false) // default
设置下载的图片是否缓存在SD卡中
.cacheOnDisk(false) // default
设置图片的解码类型
.bitmapConfig(Bitmap.Config.ARGB_8888)
设置图片的展示方式
.displayer(new SimpleBitmapDisplayer()) // default
bitmapConfig
- Bitmap.Config.ARGB_8888 一个像素点 =32位
- Bitmap.Config RGB_565 一个像素点 =16位
displayer
- RoundedBitmapDisplayer(int roundPixels)设置圆角图片
- FakeBitmapDisplayer()这个类什么都没做
- FadeInBitmapDisplayer(int durationMillis)设置图片渐显的时间
- SimpleBitmapDisplayer()正常显示一张图片
四、displayImage(显示图片)
displayImage(uri, imageView, options, listener, progressListener);
1 uri 图片的URL地址
2 imageView 显示图片的ImageView控件
3 options DisplayImageOptions配置信息
4 listener 图片下载情况的监听
5 progressListener 图片下载进度的监听
ImageLoadingListener
- onLoadingStarted //开始加载
- onLoadingFailed //加载失败
- onLoadingComplete //加载成功
- onLoadingCancelled //加载取消
五、清除缓存
清除内存缓存
ImageLoader.getInstance().clearMemoryCache();
清除本地缓存成功
ImageLoader.getInstance().clearDiskCache()
六、使用注意的事项
1、一定要对ImageLoaderConfiguration进行初始化,否则会报错。
2、如果你经常出现oom,你可以尝试:
- 1)禁用在内存中缓存cacheInMemory(false),如果oom仍然发生那么似乎你的应用程序有内存泄漏,使用MemoryAnalyzer来检测它。
- 2)减少配置的线程池的大小(.threadPoolSize(…)),建议1~5。
- 3)在显示选项中使用 .bitmapConfig(Bitmap.Config.RGB_565),.RGB_565模式消耗的内存比ARGB_8888模式少两倍。
- 4)配置中使用.diskCacheExtraOptions(480, 320, null)。
- 5)配置中使用.memoryCache(newWeakMemoryCache()),或者完全禁用在内存中缓存。
- 6)在显示选项中使用.imageScaleType(ImageScaleType.EXACTLY)或.imageScaleType(ImageScaleType.IN_SAMPLE_INT)。
- 7)避免使用 RoundedBitmapDisplayer。
Universal-Image-Loader是Android图片处理的重要库,提供异步加载和缓存机制,解决OOM等问题。本文详细介绍了其特点、全局配置ImageLoaderConfiguration、显示配置DisplayImageOptions、显示图片方法及使用注意事项。
234

被折叠的 条评论
为什么被折叠?



