Universal Image Loader for Android 使用实例
<span style="white-space:pre"> </span>// 1.获取ImageLoader实例
ImageLoader imageLoader = ImageLoader.getInstance();
// 2. 使用默认配置
ImageLoaderConfiguration configuration = ImageLoaderConfiguration.createDefault(this);
// 3. 初始化ImageLoader
imageLoader.init(configuration);
// 4. 显示图片时的配置
displayImageOptions = new DisplayImageOptions.Builder().cacheInMemory().cacheOnDisc()
.bitmapConfig(Config.RGB_565).build();
// 5.显示图片
imageLoader.displayImage(uri, imageView, displayImageOptions);
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
以下为参照原文进行的翻译
1. Caching默认不可用. 启用需要对DisplayImageOptions进行如下配置:
2. // Create default options which will be usedfor every
3. // displayImage(...) call if no options will be passed to this method
4. DisplayImageOptions defaultOptions= new DisplayImageOptions.Builder()
5. ...
6. .cacheInMemory()
7. .cacheOnDisc()
8. ...
9. .build();
10. ImageLoaderConfiguration config= new ImageLoaderConfiguration.Builder(getApplicationContext())
11. ...
12. .defaultDisplayImageOptions(defaultOptions)
13. ...
14. .build();
15. ImageLoader.getInstance().init(config);// Do it on Application start
16. // Then later, when you want to display image
17. ImageLoader.getInstance().displayImage(imageUrl, imageView); // Default options will be used
or this way:
DisplayImageOptions options= new DisplayImageOptions.Builder()
...
.cacheInMemory()
.cacheOnDisc()
...
.build();
ImageLoader.getInstance().displayImage(imageUrl, imageView, options); // Incoming options will be used
18. 开启缓存后默认会缓存到外置SD卡如下地址(/sdcard/Android/data/[package_name]/cache).如果外置SD卡不存在,会缓存到手机.缓存到Sd卡需要在Manifest文件中进行如下配置
19. <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
20. UIL是如何为ImageView精确定义需要的Bitmap的尺寸?它会搜索如下参数
o 获取ImageView真实的 width和 height
o 获取 android:layout_width 和 android:layout_height 参数
o 获取 android:maxWidth and/or android:maxHeight 参数
o 从configuration (memoryCacheExtraOptions(int,int) option)获取 maximum width and/or height 参数
o 获取设备屏幕的 width and/or height
所以如果你知道ImageView的大约最大尺寸,就可以设置如下参数android:layout_width|android:layout_height or android:maxWidth|android:maxHeight 这样会有助于正确计算当前View所需要的Bitmap尺寸,并节约内存
如果你使用UIL时经常出现 OutOfMemoryError 那你可以尝试如下方法:
o 减少线程池大小 (.threadPoolSize(...)). 1 - 5 isrecommended.
o 在显示选项中使用 .bitmapConfig(Bitmap.Config.RGB_565) . RGB_565模式消耗的内存比ARGB_8888模式少两倍.
o 配置中使用 .memoryCache(newWeakMemoryCache()) 或者完全禁用在内存中缓存(don't call .cacheInMemory()).
o 在显示选项中使用 .imageScaleType(ImageScaleType.IN_SAMPLE_INT) 或者.imageScaleType(ImageScaleType.EXACTLY).
o 避免使用 RoundedBitmapDisplayer.调用的时候它使用ARGB-8888模式创建了一个新的Bitmap对象来显示
对于内存缓存模式 (ImageLoaderConfiguration.memoryCache(...))你可以使用已经实现好的方法.
o 缓存只能使用强引用:
§ LruMemoryCache (Least recently used bitmap is deleted when cache size limit isexceeded缓存大小超过指定值时,删除最近最少使用的bitmap) - Used by default for API >= 9
o 缓存使用弱引用和强引用:
§ UsingFreqLimitedMemoryCache (Least frequently used bitmap is deleted when cachesize limit is exceeded删除最少使用bitmap)
§ LRULimitedMemoryCache (Least recently used bitmap is deletedwhen cache size limit is exceeded删除最近最少使用bitmap) - Used by default for API < 9
§ FIFOLimitedMemoryCache (FIFOrule is used for deletion when cache sizelimit is exceeded先进先出规则删除bitmap)
§ LargestLimitedMemoryCache (The largest bitmap is deleted when cache sizelimit is exceeded删除最大的bitmap)
§ LimitedAgeMemoryCache (Decorator. Cached object is deleted when its ageexceeds defined value缓存对象超过定义的时间后删除)
o 缓存只能使用弱引用:
§ WeakMemoryCache (Unlimited cache不限制缓存)
21. 本地缓存模式可以使用以下以实现的方法 (ImageLoaderConfiguration.discCache(...)):
o UnlimitedDiscCache (The fastest cache, doesn't limit cache size不限制缓存大小) - Used by default
o TotalSizeLimitedDiscCache (Cache limited by total cache size. If cache size exceedsspecified limit then file with the most oldest last usage date will be deleted设置总缓存大小,超过时删除最久之前的缓存)
o FileCountLimitedDiscCache (Cache limited by file count. If file count incache directory exceeds specified limit then file with the most oldest lastusage date will be deleted. Use it if your cached files are of about the samesize.设置总缓存文件数量,当到达警戒值时,删除最久之前的缓存。如果文件的大小都一样的时候,可以使用该模式)
o LimitedAgeDiscCache (Size-unlimited cache with limited files' lifetime.If age of cached file exceeds defined limit then it will be deleted from cache.不限制缓存大小,但是设置缓存时间,到期后删除)
NOTE: UnlimitedDiscCache比其他方式快30%以上.
22. To displaybitmap (DisplayImageOptions.displayer(...)) you can usealready prepared implementations:
o RoundedBitmapDisplayer (Displays bitmap with rounded corners)
o FadeInBitmapDisplayer (Displays image with "fade in" animation)
23. To avoid list(grid, ...) scrolling lags you can use PauseOnScrollListener:
24. boolean pauseOnScroll= false; // or true
25. boolean pauseOnFling= true; // or false
26. PauseOnScrollListener listener= new PauseOnScrollListener(imageLoader, pauseOnScroll, pauseOnFling);
27. listView.setOnScrollListener(listener);
- 构建Flex应用的10大误区
- Flex的起步推动新语言学习
- 简单科普云计算相关内容
- Silverlight初级教程-开发工具
- WCF的Binding模型之五:绑定元素(Binding Element)
- 2018年物联网发展趋势
- Silverlight初级教程-概述
- WCF的Binding模型之四:信道工厂(Channel Factory)
- 如何做一个好的前端重构工程师
- 云计算是否真的对企业来说无所不能?
- 科协带你开个2017年科技世界的总结会!
- 基于StockRanker算法的机器学习量化策略
- Enterprise Library深入解析与灵活应用(6):自己动手创建迷你版AOP框架
- 交易费用过高的比特币还能成为“未来货币”吗?
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- linux crm部署代码详解
- Android自定义WaveProgressView实现水波纹加载需求
- CentOS8下的root密码快速修改方法
- Android开发之自定义刮刮卡实现代码
- Android ScrollView无法填充满屏幕的解决办法
- Android 监听屏幕是否锁屏的实例代码
- Android实现水波纹控件的方法
- Android中GridView布局实现整体居中方法示例
- Android SharedPreferences四种操作模式使用详解
- Ubuntu18.04下将 磁盘挂载在某目录下
- Android编程之绘图canvas基本用法示例
- Android 编译出错版本匹配问题解决办法
- Linux(CentOS7)使用 RPM 安装 mysql 8.0.11的教程
- Android Adapter里面嵌套ListView实例详解
- Centos7 安装达梦数据库的教程