【译】UNIVERSAL IMAGE LOADER. PART 3---ImageLoader详解
在之前的文章,我们重点讲了Android-Universal-Image-Loader的三个主要组件,现在我们终于可以开始使用它了。
Android-Universal-Image-Loader有四个重载方法
- void displayImage(String url, ImageView view)
- void displayImage(String url, ImageView view, DisplayImageOptions options)
- void displayImage(String url, ImageView view, ImageLoadingListener listener)
- void displayImage(String url, ImageView view, DisplayImageOptions options, ImageLoadingListener listener)
第一个重载方法
所有东西都很简单。url就是图片的下载地址,ImageView就是需要显示它的imageView控件。这个ViewOption(DisplayOptions)将使用默认配置option(defaultDisplayImageOptions(…))
第二个重载方法
我们可以针对特定的任务做一些特定的option。首先,我会先给一个使用特定操作的例子:
- DisplayImageOptions options = new DisplayImageOptions.Builder()
- .showStubImage(R.drawable.stub_image)
- .showImageForEmptyUrl(R.drawable.image_for_empty_url)
- .cacheInMemory()
- .cacheOnDisc()
- .decodingType(DecodingType.MEMORY_SAVING)
- .build();
• 当真正的图片正在下载,是否需要在ImageView中显示另一张图片,显示什么图片;
• 当遇到空的Image URL时,是否需要在ImageView中显示另一张图片,显示什么图片;
• 是否在内存中缓存已加载的image;
• 是否在磁盘中(file system)缓存已下载的图片;
• 要尽可能快(DecodingType.FAST)还是尽可能节约地使用RAM(DecodingType.MEMORY_SAVING)
所以,我们可以在每次调用displayImage()方法的时候将这些option传递过去,或者在初始化中的configuration中定义默认的option,然后程序中就会使用这些特定的options不管你有没有明确地传递DisplayImageOptions。
第三个重载方法
除此之外,我们可以使用ImageLoadingListener监听图片的下载和显示过程:
- public interface ImageLoadingListener {
- void onLoadingStarted();
- void onLoadingFailed();
- void onLoadingComplete();
- }
第四个重载方法是最强大的。你可以定制option和监听那些过程
1、为了正常运行,你需要传递给ImageLoader正确的参数。重点是ImageView而不是Image URL。如果你在代码里面创建一个ImageView(而不是使用LayoutInflater),然后将当前的Activity传递给构造函数,而不是application context。
- ImageView imageView = new ImageView(getApplicationContext()); // Wrong!
- ImageView imageView = new ImageView(MyActivity.this); // Correctly
- ImageView imageView = new ImageView(getActivity()); // Correctly (for Fragments)
2、只有当你想加载ImageView图片比设备的屏幕尺寸更大(例如,对于后续的缩放操作),那么你才需要在configuration配置maxImageWidthForMemoryCache(…)和maxImageHeightForMemoryCache(…)参数。在其他情况下,你不需要特殊的配置:这些参数是因为需要考虑缓存bitmap时屏幕大小和内存大小。
3、明智地在configuration中设置线程池大小:大池(线程数>10)允许多线程同时运行,这将极大地影响UI响应的速度。但是它可以通过将这些线程的优先级设置为更低解决:当ImageLoader运行以及更多的图片加载时,低优先级的线程会让UI更具响应性。UI的相应能力对列表视图(如ListView、GridView)来说至关重要(如平滑滚动时),所以你应该配置threadPoolSize(...) and threadPriority(...)参数为你的应用程序选一个最优的配置。
4、memoryCacheSize(...) and memoryCache(...)设置有相互重叠的地方。在一个configuration对象中只使用其中一个。
5、discCacheSize(…),discCacheFileCount(…)和discCache(…)设置有相互重叠的地方。在一个configuration对象中只使用其中一个。
6、如果在App中使用ImageLoader你总是或几乎总要传递相同的加载option(DisplayImageOptions)给displayImage(…)方法,然而一个合理的解决方案时在ImageLoader配置中将这些相同的加载选项设置为默认配置(defaultDisplayImageOptions(...) method)。然后在调用displayImage(…)时你就可以不指明这些option。如果options没有明确传递给这些方法,那么这个任务就会使用默认的options。
7、对于FAST 和 MEMORY_SAVING两种解析类型没有特别的重大的区别,但是推荐对所有种类的列表视图(GridView、ListView)使用FAST(当你需要显示许多小图片)。为图片查看器使用MEMORY_SAVING(当你需要显示大尺寸的图片时)
参考链接:
UNIVERSAL IMAGE LOADER. PART 3
【译】UNIVERSAL IMAGE LOADER. PART 3---ImageLoader详解的更多相关文章
- android universal image loader 缓冲原理详解
1. 功能介绍 1.1 Android Universal Image Loader Android Universal Image Loader 是一个强大的.可高度定制的图片缓存,本文简称为UIL ...
- universal image loader自己使用的一些感受
1.全局入口的Application定义初始化: ImageLoaderConfiguration configuration = new ImageLoaderConfiguration.Build ...
- Android中Universal Image Loader开源框架的简单使用
UIL (Universal Image Loader)aims to provide a powerful, flexible and highly customizable instrument ...
- universal image loader在listview/gridview中滚动时重复加载图片的问题及解决方法
在listview/gridview中使用UIL来display每个item的图片,当图片数量较多需要滑动滚动时会出现卡顿,而且加载过的图片再次上翻后依然会重复加载(显示设置好的加载中图片) 最近在使 ...
- 【Android应用开发】 Universal Image Loader ( 使用简介 | 示例代码解析 )
作者 : 韩曙亮 转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/50824912 相关地址介绍 : -- Universal I ...
- 开源项目Universal Image Loader for Android 说明文档 (1) 简介
When developing applications for Android, one often facesthe problem of displaying some graphical ...
- 开源项目Universal Image Loader for Android 说明文档 (1) 简单介绍
When developing applications for Android, one often facesthe problem of displaying some graphical ...
- 转:【译】CSS3:clip-path详解
我的一个学生,Heather Banks,想要实现他在Squarespace看到的一个效果: 根据她的以往经验,这个网站的HTML和CSS是完全在她的能力范围以内,于是我帮助她完成了这个效果.显示na ...
- 【译】ASP.NET MVC 5 教程 - 11:Details 和 Delete 方法详解
原文:[译]ASP.NET MVC 5 教程 - 11:Details 和 Delete 方法详解 在教程的这一部分,我们将研究一下自动生成的 Details 和Delete 方法. Details ...
随机推荐
- jenkins+findbugs
1) Jenkins安装findbugs插件 具体安装步骤:在主页面进入系统管理 选择插件管理 在过滤器中找出要安装的插件,并进行安装(Static Analysis Utilities.findb ...
- —linux 磁盘配额按用户管理(quota)
我根据下面的ref链接整理的基本是的按用户额度管理步骤 (按组的额度管理被简化掉) 我在Ubuntu服务器12.04下整理,其他版本的Ubuntu和Linux应该都没有问题的 (有任何错误都指正给我, ...
- MFC 实现字符串的移动
在视类添加一个WM_KeyDown,然后实现函数写上 switch(nChar) {.. CRect rc; GetClientRect(&rc); int nWidth = rc.Wid ...
- css 中 list-style-image:
用于设置<a>标签的默认格式的背景图片
- 状态机学习(三)解析JSON
来自 从零开始的 JSON 库教程 从零开始教授如何写一个符合标准的 C 语言 JSON 库 作者 Milo Yip https://zhuanlan.zhihu.com/json-tutorial ...
- js 合并表格
1.css和js部分 <style type="text/css">table.altrowstable { font-family: verdana,arial,sa ...
- PHP 判断数组是否为空的5大方法
1. isset功能:判断变量是否被初始化 说明:它并不会判断变量是否为空,并且可以用来判断数组中元素是否被定义过 注意:当使用isset来判断数组元素是否被初始化过时,它的效率比array_key_ ...
- LeetCode OJ-- Valid Number **@
https://oj.leetcode.com/problems/valid-number/ 判断给的串,是不是合理的 数字形式 主要问题在需求定义上吧 class Solution { public ...
- Tomcat7.0安装配置详细
说明:Tomcat服务器上一个符合J2EE标准的Web服务器,在tomcat中无法运行EJB程序,如果要运行可以选择能够运行EJB程序的容器WebLogic,WebSphere,Jboss等:Tomc ...
- Java多线程死锁的产生实例
死锁产生的四个必要条件: (1) 互斥条件:一个资源每次只能被一个进程使用.(2) 请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放.(3) 不剥夺条件:进程已获得的资源,在末使用完 ...