一、ImageLoaderConfiguration的配置
1、memoryCache(MemoryCache memoryCache)
设置内存缓存,默认是LruMemoryCache
2、memoryCacheSize(int memoryCacheSize)
设置在内存缓存的大小,如2*1024*1024
3、memoryCacheSizePercentage(int availableMemoryPercent)
设置在内存缓存的占可用内存的百分比,默认是1/8。
4、diskCache(DiskCache diskCache)
设置磁盘缓存,默认UnlimitedDiskCache
5、diskCacheFileCount(int maxFileCount)
设置最大磁盘缓存文件的数量
6、diskCacheSize(int maxCacheSize)
设置最大磁盘缓存文件的大小
7、diskCacheFileNameGenerator(FileNameGenerator fileNameGenerator)
设置磁盘缓存文件的命名方式
8、defaultDisplayImageOptions(DisplayImageOptions defaultDisplayImageOptions)
设置默认显示图片的选项
9、writeDebugLogs()
设置是否打印log
10、denyCacheImageMultipleSizesInMemory()
设置内存缓存不允许缓存不同大小的图片,也就是一个URL只对应一个缓存的bitmap。默认是允许的。
11、tasksProcessingOrder(QueueProcessingType tasksProcessingType)
设置加载图片任务的排队方式,默认FIFO,先进先出,还有一种是 LIFO后进先出。
12、threadPoolSize(int threadPoolSize)
设置线程池中线程的数量,默认为3
13、threadPriority(int threadPriority)
设置线程的优先级,默认为3
设置图片保存到内存最大的宽高,默认是手机屏幕的宽高,如果ImageLoader获取到View的宽高为0是,那么加载的图片将使用这个大小。
15、diskCacheExtraOptions(int maxImageWidthForDiskCache, int maxImageHeightForDiskCache,
BitmapProcessor processorForDiskCache)
BitmapProcessor processorForDiskCache)
设置图片缓存到磁盘最大的宽高,BitmapProcessor 是缓存图片时处理图片的接口,可以传null。
16、imageDownloader(ImageDownloader imageDownloader)
设置下载的类
17、imageDecoder(ImageDecoder imageDecoder)
设置解码的类
18、taskExecutor(Executor executor)
设置加载和图片使用的线程池
19、taskExecutor(Executor executor)
设置缓存图片到磁盘的线程池
二、ImageLoaderConfiguration的常用配置
16-19这些基本上是用不到,除非你实现ImageLoader相应的接口,自己实现功能。
15一般用于缓存图片到磁盘时处理图片,一般用不到,可以不用配置。
14设置内存缓存图片的最大宽高,一般当ImageLoader获取View的宽高为0时,将使用这个宽高来显示图片,一般情况下使用默认值,也就是屏幕的宽高。
13一般保持默认,不要设置太高,会影响主线程。
12一般保持默认,区间是1-5个,设置越高,速度越快,同时消耗的内存也越多。
11设置任务执行的顺序,默认是FIFO,先进先出,还有一种是LIFO后进先出,在一个ListView里面显示图片,设置成FIFO的话,是从上往下依次加载,而设置成LIFO的话,是从下往上加载。
10调用的话,一个URL只对应一个缓存的bitmap,先在一个小的ImageView上显示一张图片,该图片被加入到缓存,后面有一个大的ImageView要显示这张图片,就会把前面的小的bitmap从缓存中移除,再将大的Bitmap加入到缓存中。
9配置是否显示log,这个一般在开发时调用打开,发布版本前注释掉。
8为ImageLoader显示图片的默认选项,在加载图片时,如果没有传入DisplayImageOptions参数时,默认使用这个DisplayImageOptions,一般设置为最常用的DisplayImageOptions。
7是磁盘缓存文件的命名方式,有两种方法,一种是HashCodeFileNameGenerator,哈希命名方法;一直是Md5FileNameGenerator
默认使用的是HashCodeFileNameGenerator。
6磁盘缓存文件的最大大小,为当DiskCache没有配置时,构造默认使用LruDiskCache时当参数传入。
5磁盘缓存文件的最大数量,为当DiskCache没有配置时,构造默认使用LruDiskCache时当参数传入。
4配置磁盘缓存,主要有三种类型:
UnlimitedDiscCache: 默认使用的缓存,速度最快, 没有缓存大小限制 。
LruDiskCache:限制缓存文件数量的缓存,当达到缓存数量是,移除最近最少使用的缓存文件。
LimitedAgeDiscCache :限制缓存文件的缓存时间,超过时间,则从缓存中移除。
LruDiskCache:限制缓存文件数量的缓存,当达到缓存数量是,移除最近最少使用的缓存文件。
LimitedAgeDiscCache :限制缓存文件的缓存时间,超过时间,则从缓存中移除。
3设置图片内存缓存占程序可用内存的百分比,一般为1/8,会换算成2中的memoryCacheSize。
2设置图片缓存的大小,用于构造LruMemoryCache时传入参数。
1内存缓存类型
强引用缓存:
LruMemoryCache :默认使用,达到缓存容量时,移除最近最少使用的Bitmap。
同时包含强引用和弱引用:
UsingFreqLimitedMemoryCache: 缓存达到上限时,移除使用频率最少的Bitmap。
LRULimitedMemoryCache:缓存达到上限时,移除最近最少使用的Bitmap
FIFOLimitedMemoryCache :缓存达到上限时,移除先加入到缓存的Bitmap
LargestLimitedMemoryCache: 缓存达到上限时,移除最大的Bitmap
LimitedAgeMemoryCache:缓存达到上限时,移除超过时间限制的Bitmap
弱引用:
WeakMemoryCache (没有限制的缓存)
LruMemoryCache :默认使用,达到缓存容量时,移除最近最少使用的Bitmap。
同时包含强引用和弱引用:
UsingFreqLimitedMemoryCache: 缓存达到上限时,移除使用频率最少的Bitmap。
LRULimitedMemoryCache:缓存达到上限时,移除最近最少使用的Bitmap
FIFOLimitedMemoryCache :缓存达到上限时,移除先加入到缓存的Bitmap
LargestLimitedMemoryCache: 缓存达到上限时,移除最大的Bitmap
LimitedAgeMemoryCache:缓存达到上限时,移除超过时间限制的Bitmap
弱引用:
WeakMemoryCache (没有限制的缓存)
如果对ImageLoader的内存缓存不了解的话,有没有特殊要求的话,1-3都可以不配置,ImageLoader会使用默认的内存缓存去缓存图片,也就是使用了强引用LruMemoryCache,是性能最好的。
对于配置是否启用内存缓存和磁盘缓存,是在DisplayImageOptions中配置。后续文章会详细介绍DisplayImageOptions的配置。
下面贴上官方demo的配置,一般可以参考这个:
ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(context)
.threadPriority(Thread.NORM_PRIORITY - 2)
.denyCacheImageMultipleSizesInMemory()
.diskCacheFileNameGenerator(new Md5FileNameGenerator())
.diskCacheSize(50 * 1024 * 1024) // 50 Mb
.tasksProcessingOrder(QueueProcessingType.FIFO)
.writeDebugLogs() // Remove for release app
.threadPoolSize(5)
.build();
// Initialize ImageLoader with configuration.
ImageLoader.getInstance().init(config);