Universal Image Loader 学习笔记-框架配置
来源:互联网 发布:mp4变成mp3软件 编辑:程序博客网 时间:2024/05/16 12:02
UIL框架是强大的、灵活的,很重要的一点在于各种配置。
概述
ImageLoader的配置(ImageLoaderConfiguration)是应用程序的全局性的,你只能设置一次。所以,一般在自定义的Application类的onCreate()中进行配置,当然也可以在一个Activity中配置(只要在使用之前配置并且只配置一次)。配置建造器中的所有的选项都是可选择的,大家可以只使用自己想要定制的选项。
线程
Android系统中每个应用都是一个dalvik进程,该进程当中会有多个线程,大家最熟悉的就是主线程,也就是UI线程,大家也会开辟很多的子线程用来执行一些耗时任务,保证界面的流畅。每个线程都会有一个优先级(priority),它会影响操作系统如何的规划调度该线程。优先级的取值范围是[1,10],默认优先级是5,主线程优先级是5,优先级越高越先被执行。
UIL中处理任务采用的线程池(后面再说),线程池中的线程数量和优先级都是可以配置的。
ImageLoaderConfiguration configuration = new ImageLoaderConfiguration.Builder(context) .threadPriority(Thread.NORM_PRIORITY - 2)//一般比着主线程低两级 .threadPoolSize(3)//默认三个 .build();
任务
UIL中使用两个线程池进行任务的处理。
- 第一个是一般任务线程池,用来加载和显示图片。
- 第二个是已缓存图片任务线程池,用来显示已经缓存在硬盘(设备存储或者SD卡)中的图片。因为图片在本地,处理比较快,所以设计一个独立的线程池。
这两个线程池是可以通过下面的方法定制的。同时,还可以定制图片显示任务的队列处理策略,先进先出(FIFO)和后进先出(LIFO)两种。
ImageLoaderConfiguration configuration = new ImageLoaderConfiguration.Builder(context) .taskExecutor(Executor)//第一种线程池 .taskExecutorForCachedImages(Executor)//第二种线程池 .tasksProcessingOrder(QueueProcessingType.LIFO)//后进先出 .build();
注:
- taskExecutor和taskExecutorForCachedImages调用的话,threadPriority、threadPoolSize、taskExecutorForCachedImages这三个配置失效。
- taskExecutor和taskExecutorForCachedImages配置同一个线程池的话,任务队列中短时任务将会等待很长时间才执行。
内存缓存
该缓存是指图片位于内存当中,读取速度快。可以自己定制一下几项。
- 实现接口MemoryCache的类,包含图片的集合以及相关的存取操作
- 图片解码为Bitmap缓存到内存时,最大的宽和高,默认设备屏幕的宽和高
内存中图片占用的最大值,默认是应用内存的八分之一,单位:字节
图片占用应用可用内存百分数的最大值,默认是应用内存的八分之一
ImageLoaderConfiguration configuration = new ImageLoaderConfiguration.Builder(context) .memoryCacheExtraOptions(100, 100)//图片宽高100px .memoryCacheSize(1000)//1000字节 .memoryCacheSizePercentage(20)//20% .memoryCache(new MemoryCache() { @Override public boolean put(String key, Bitmap value) { return false; } @Override public Bitmap get(String key) { return null; } @Override public Bitmap remove(String key) { return null; } @Override public Collection<String> keys() { return null; } @Override public void clear() { } }) .build();
硬盘缓存
UIL框架比较经典的是三级缓存,包括内存、硬盘和网络。这个缓存策略可以不重复下载已经下载过的图片,极大的节省了用户的流量,不重复加载已经在内存中的图片,提高了图片显示的效率。缓存到硬盘的图片同样需要大家对其进行管理。
- diskCacheExtraOptions(int maxImageWidthForDiskCache, int maxImageHeightForDiskCache,
BitmapProcessor processorForDiskCache):设置下载下来的图片缓存到硬盘时的缩放比或者压缩比(注:又需要的时候才使用,因为会使图片加载变慢) - diskCacheFileCount(int maxFileCount):设置硬盘缓存目录中的最大文件数,默认是无限制的。使用此方法,将默认使用LruDiskCache作为硬盘缓存类。可以使用diskCache(DiskCache)方法来引入自己的对接口DiskCache的实现。
- diskCacheFileNameGenerator(FileNameGenerator fileNameGenerator):设置缓存文件名的生成器,避免用户看到图片的URL。UIL自身提供了两种文件名生成器,哈希(HashCodeFileNameGenerator)和MD5(Md5FileNameGenerator)。
- diskCacheSize(int maxCacheSize):设置硬盘中图片占用空间的最大值,单位:字节,默认值:无限制。使用此方法,将默认使用LruDiskCache作为硬盘缓存类。可以使用diskCache(DiskCache)方法来引入自己的对接口DiskCache的实现。
- diskCache(DiskCache diskCache):设置自己的接口DiskCache的实现。默认值可以通过StorageUtils.getCacheDirectory(Context)得到。调用此方法,上面的三个方法将失效。
ImageLoaderConfiguration configuration = new ImageLoaderConfiguration.Builder(context) .diskCacheExtraOptions(100, 100, new BitmapProcessor() { @Override public Bitmap process(Bitmap bitmap) { return null; } }) .diskCacheFileCount(100) .diskCacheFileNameGenerator(new Md5FileNameGenerator()) .diskCacheSize(1000) .diskCache(new DiskCache() { @Override public File getDirectory() { return null; } @Override public File get(String imageUri) { return null; } @Override public boolean save(String imageUri, InputStream imageStream, IoUtils.CopyListener listener) throws IOException { return false; } @Override public boolean save(String imageUri, Bitmap bitmap) throws IOException { return false; } @Override public boolean remove(String imageUri) { return false; } @Override public void close() { } @Override public void clear() { } }) .build();
图片加载
图片资源的加载可以由自己定义其实现,只要根据图片的URI返回图片的流即可。
ImageLoaderConfiguration configuration = new ImageLoaderConfiguration.Builder(context) .imageDownloader(new ImageDownloader() { @Override public InputStream getStream(String imageUri, Object extra) throws IOException { return null; } }) .build();
图片解码
设置一个公用模块,可以对图片的流进行一些处理,返回需要的Bitmap。
ImageLoaderConfiguration configuration = new ImageLoaderConfiguration.Builder(context) .imageDecoder(new ImageDecoder() { @Override public Bitmap decode(ImageDecodingInfo imageDecodingInfo) throws IOException { return null; } }) .build();
图片显示
设置图片显示的时候的一些默认选项,作为每次显示图片的默认选项,也可以每次通过displayImage(String, ImageView)单独设置。
ImageLoaderConfiguration configuration = new ImageLoaderConfiguration.Builder(context) .defaultDisplayImageOptions(DisplayImageOptions.createSimple()) .build();
日志输出
打开此项设置,在程序运行时可以输出ImageLoader的工作日志。
ImageLoaderConfiguration configuration = new ImageLoaderConfiguration.Builder(context) .writeDebugLogs() .build();
创建
整个配置的设计采用建造者模式,通过对ImageLoaderConfiguration.Builder的各项参数设置之后,调用Builder.build()方法即可创建出ImageLoaderConfiguration,设置给ImageLoader进行初始化。
ImageLoaderConfiguration configuration = new ImageLoaderConfiguration.Builder(context) .build();ImageLoader.getInstance().init(configuration);
UIL可自己灵活配置的涵盖了使用UIL的方方面面,大家可以根据自己项目的需要进行设置。后续,我努力分篇对某项配置及其实现进行学习并做笔记,水平不高,多提宝贵意见,谢谢!!!
赞助
本文由老司机学院动脑学院特约赞助。
做一家受人尊敬的企业,做一位令人尊敬的老师
- Universal Image Loader 学习笔记-框架配置
- universal image loader学习笔记
- android Universal-Image-Loader框架学习
- android Universal-Image-Loader框架学习
- universal-image-loader 配置
- universal-image-loader 配置
- universal-image-loader 配置
- universal-image-loader 配置
- universal-image-loader 配置
- Android-Universal-Image-Loader学习笔记
- Android Universal Image Loader学习笔记
- Universal Image Loader 学习笔记-基本使用
- Universal Image Loader 学习笔记-设计模式
- Universal Image Loader 学习笔记-图片加载
- Universal Image Loader 笔记
- Android 开源框架Universal-Image-Loader的配置
- universal-image-loader的配置
- Android-Universal-Image-Loader笔记
- 初创公司多产品线分红篇
- unity打包选项编辑器扩展
- Migrating spring 4 from spring 3
- 非ROOT实现静默安装的一些思考与体会,AIDL获取IPackageManager,反射ServiceManager,系统签名
- 打开JMeter,提示:Could not open/create prefs root node Software\JavaSoft\Prefs at root 0x80000002. Window
- Universal Image Loader 学习笔记-框架配置
- android底层驱动学习之内核信息的输出以及控制方式
- 使用OPENCV3图像对齐
- django常用命令
- [svn]Java项目带有图标的意思
- java版本切换
- 使用 GROUP BY WITH ROLLUP 改善统计性能
- Android surfaceview双缓冲机制和闪屏的解决方法内附代码详解
- git命令总结