博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【译】UNIVERSAL IMAGE LOADER. PART 3---ImageLoader详解
阅读量:6438 次
发布时间:2019-06-23

本文共 2776 字,大约阅读时间需要 9 分钟。

在,我们重点讲了的三个主要组件,现在我们终于可以开始使用它了。

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); // CorrectlyImageView 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(当你需要显示大尺寸的图片时)

 

 

 

参考链接:

本文转自陈哈哈博客园博客,原文链接http://www.cnblogs.com/kissazi2/p/3901235.html如需转载请自行联系原作者
kissazi2
你可能感兴趣的文章
几款常见的视频格式转换器
查看>>
行为型模式:模板方法
查看>>
质因子分解
查看>>
Quartz实现数据同步 | 从0开始构建SpringCloud微服务(3)
查看>>
css实现浏览历史小块
查看>>
<译>有关态射的一切
查看>>
Spring Cloud Alibaba迁移指南(三):极简的 Config
查看>>
java: final
查看>>
Asf PHP扩展框架之预警模块介绍
查看>>
ES6对象的扩展及新增方法。
查看>>
ORM: SQLAlchemy 初识
查看>>
前端进击的巨人(五):学会函数柯里化(curry)
查看>>
Ajax上传文件/照片时报错TypeError :Illegal invocation
查看>>
揭秘阿里云EB级大数据计算引擎MaxCompute
查看>>
订单突破10000+,仅花1小时,APPx独家深入剖析背后的秘密!
查看>>
后端相关技能(三):正则表达式
查看>>
Java中的锁之乐观锁与悲观锁
查看>>
TiDB Ecosystem Tools 原理解读(一):TiDB-Binlog 架构演进与实现原理
查看>>
集合模块collections
查看>>
【实战教程】在小程序中快速生成分享海报
查看>>