Android学习笔记:Universal-Image-Loader

Universal-Image-Loader是Android图片处理的重要库,提供异步加载和缓存机制,解决OOM等问题。本文详细介绍了其特点、全局配置ImageLoaderConfiguration、显示配置DisplayImageOptions、显示图片方法及使用注意事项。

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。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值