Android学习笔记:Universal-Image-Loader

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()) 或者完全禁用在内存中缓存(don’t call .cacheInMemory()).

6)在显示选项中使用.imageScaleType(ImageScaleType.EXACTLY) 或 .imageScaleType(ImageScaleType.IN_SAMPLE_INT)

7)避免使用 RoundedBitmapDisplayer. 调用的时候它使用ARGB-8888模式创建了一个新的Bitmap对象来显示,对于内存缓存模式 (ImageLoaderConfiguration.memoryCache(…)) 你可以使用已经实现好的方法.

你可能感兴趣的:(Android,Android学习笔记)