Universal-Image-Loader是目前Android主流的图片处理库框架之一,作者是白俄罗斯的Sergey Tarasevich。
在Android图片处理中需要考虑的问题很多,例如OOM、图片缓存和网络图片加载、多线程问题及图片压缩处理等等复杂的问题。但是Universal-ImageLoader已经帮我们把这些问题处理好了,对外提供了相应的完善的请求API,我们只需要按照要求使用即可。
(以下内容来源于某培训机构,侵删)
生成一个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(这个缓存类没有任何的限制)
初始化方法
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(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()) 或者完全禁用在内存中缓存(don’t call .cacheInMemory()).
6)在显示选项中使用.imageScaleType(ImageScaleType.EXACTLY) 或 .imageScaleType(ImageScaleType.IN_SAMPLE_INT)
7)避免使用 RoundedBitmapDisplayer. 调用的时候它使用ARGB-8888模式创建了一个新的Bitmap对象来显示,对于内存缓存模式 (ImageLoaderConfiguration.memoryCache(…)) 你可以使用已经实现好的方法.