今天要介绍的是Github上一个使用非常广泛的图片异步加载库Android-Universal-Image-Loader,该项目的功能十分强大,可以说是我见过的目前功能最全、性能最优的图片异步加载解决方案。做Android的同学都知道,Android加载大量图片时,由于系统分配给图片加载的内存大小有限,所以,如果加载图片量非常大的话容易报OOM异常,关于这个异常已经有不少解决方案了,我就不赘述。下面就简要介绍下这个开源项目的主要功能和使用:
一、功能概要
- 多线程图片加载;
- 灵活更改ImageLoader的基本配置,包括最大线程数、缓存方式、图片显示选项等;
- 图片异步加载缓存机制,包括内存缓存(软引用)及本地缓存;
- 对加载过程实现监听和事件处理;
- 能够配置加载图片的显示选项,包括图片圆角处理和加载完成显示动画等;
二、基本使用
- 下载jar包universal-image-loader-1.8.5-with-sources.jar并导入工程(这应该不用教了吧)
-
配置Manifest文件,添加网络请求和访问外部存储的权限,因为要进行网络请求和本地缓存
<uses-permission android:name="android.permission.INTERNET" /> <!-- Include next permission if you want to allow UIL to cache images on SD card --> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
3. 实现自定义的MyApplication类,并初始化ImageLoader,注意要在Manifest的Application标签注明android:name=".MyApplication",否则还是使用的默认的Application类。
public class MyApplication extends Application { @Override public void onCreate() { super.onCreate(); // This configuration tuning is custom. You can tune every option, you may tune some of them, // or you can create default configuration by // ImageLoaderConfiguration.createDefault(this); // method. ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(getApplicationContext()) .threadPriority(Thread.NORM_PRIORITY - 2) .denyCacheImageMultipleSizesInMemory() .discCacheFileNameGenerator(new Md5FileNameGenerator()) .tasksProcessingOrder(QueueProcessingType.LIFO) .enableLogging() // Not necessary in common .build(); //Initialize ImageLoader with configuration ImageLoader.getInstance().init(config); } }
4. 配置图片加载及显示选项,此处有多种自定义配置选项,可以查看doc文档一一了解,这里就不赘述(实在太多)
DisplayImageOptions options = new DisplayImageOptions.Builder() .showStubImage(R.drawable.ic_launcher) .showImageForEmptyUri(R.drawable.ic_launcher) .showImageOnFail(R.drawable.ic_launcher) .cacheInMemory(true) .cacheOnDisc(false) .displayer(new RoundedBitmapDisplayer(20)) .build();
5. 使用ImageLoader加载图片,这里以在ListView中为每个item异步加载图片为例,只要在Adapter的getView方法中调用如下方法即完成了异步列表图片加载,其中options是之前定义的图片加载和显示选项,animateFirstListener是当图片第一次加载的监听事件,目的在于显示一个淡入的显示效果动画,可以添加其他事件
- 另外,本例还实现了当列表滑动过程中暂停加载和在用户手放开时才开始加载的功能,这样的好处是保证在列表图片异步加载的过程中不出现卡顿的现象,保证加载的顺滑性。实现这一功能的手段是使ListView监听一个由ImageLoader包含的监听事件PauseOnScrollListener。
- 若设置cacheOnDisc(true)的话,则缓存的文件可以在/sdcard/Android/data/[package_name]/cache目录下看到。不过建议定期清理缓存,否则时间一长,SD卡就会被占满了,同时也可以在ImageLoaderConfiguration中配置SD的缓存策略,有限制缓存文件数量的,有限制缓存文件最大尺寸等选项。
- 如果在使用过程中遭遇OOM异常,则建议在ImageLoaderConfiguration中设置threadPoolSize在1-5之间合适。在DisplayOption配置时使用。
三、Demo效果
以下是Demo首页,提供了三种组件显示多图异步加载的方式:
下面是ListView和GridView以及ViewPager加载显示的效果图,加载效果非常流畅:
以上只是简要介绍了一下ImageLoader的功能和使用概览,具体实现代码可以查看之前的原链接和下载我的工程代码查看,详细信息请参考官方文档:点击打开链接
工程下载:工程源码
相关推荐
**Android-Universal-Image-Loader 图片异步加载库详解** 在Android开发中,图片的加载和显示是一项常见的任务,特别是在处理大量图片或者网络图片时,如何高效、流畅地加载和展示图片至关重要。为此,开发者社区...
总的来说,Android-Universal-Image-Loader是Android开发中不可或缺的工具之一,它提供了一套完整的解决方案来处理图片加载问题,既保证了用户体验,又优化了应用性能。通过深入理解和实践,开发者能够更好地应对...
在Android开发中,异步加载图片并进行缓存是一个常见的需求,特别是在开发涉及大量图片展示的应用时,如社交网络、电商应用等。`Universal Image Loader`(UIML)是一个强大的开源库,专为了解决这个问题而设计。它...
Android-Universal-Image-Loader的核心特性之一就是支持图片的异步加载。异步加载意味着在不阻塞主线程的情况下加载图片,这样可以确保UI的流畅性,避免用户看到卡顿或者 ANR(应用程序无响应)的情况。UIL 使用了...
"Android-Universal-Image-Loader"(AUIL)是一个强大的、灵活的开源组件,专门用于解决这个问题。这个组件允许开发者在Android应用中实现图片的异步加载,提高用户体验,同时降低对设备资源的消耗。 1. **异步加载...
http://www.bdqn.cn/news/201308/10849.shtml
《Android-Universal-Image-Loader:高效图片加载与缓存框架解析》 在移动应用开发中,图片加载和缓存是至关重要的环节,特别是在Android平台上,由于设备性能和网络环境的差异,良好的图片管理策略能显著提升用户...
**Android-Universal-Image-Loader** 是一个广泛使用的开源库,专为Android应用程序设计,用于高效、异步地加载和缓存网络、本地存储或资源中的图像。它由俄罗斯开发者Denis Zholos创建,旨在解决Android应用在处理...
1. **图片加载框架**:UIL是Android应用中常用的图片加载框架之一,它提供了异步加载图片的功能,可以避免UI线程阻塞,提升用户体验。 2. **内存和磁盘缓存**:该库实现了内存和磁盘两级缓存机制,以减少网络请求,...
Android-Universal-Image-Loader的主要特点是异步加载图片,可以在不阻塞UI线程的情况下加载图片,从而提高应用程序的响应速度和用户体验。同时,该框架还提供了图片缓存机制,可以将加载的图片缓存在内存中,从而...
4. **universal-image-loader-1.9.3.jar** 这是Android-Universal-Image-Loader的核心库文件,包含了所有必要的类和方法。开发者只需将这个jar包添加到项目的libs目录下,并在项目中引用,即可开始使用UIL的功能。 ...
1. **异步加载**:Android-Universal-Image-Loader支持在后台线程下载图片,避免阻塞主线程,确保UI流畅,提升用户体验。同时,它还提供了加载进度回调,开发者可以利用这些回调来展示加载进度条或者实现其他交互。 ...
`universal-image-loader-1.9.5.jar` 文件是该库的特定版本,包含所有必要的类和方法,供开发者在项目中引用。只需将此jar包添加到项目的lib目录下,并在代码中引入相关类和方法,即可开始使用Android-Universal-...
Android-Universal-Image-Loader(UIL)是一款广泛应用于Android开发中的图片加载库,它提供了强大的功能,包括异步加载、缓存策略、错误处理以及多种显示选项,使得开发者能够更高效、灵活地处理应用程序中的图像...
"Android-Universal-Image-Loader"库就是一个强大的解决方案,它专为Android平台设计,用于实现图片的异步加载、缓存和显示,从而提高应用性能并优化用户体验。这个库由Sergey Tarasevich开发,自2011年以来,已经...
Android-Universal-Image-Loader(简称UIL)是一个广泛使用的开源图片加载库,专为Android平台设计,用于高效、异步地加载和缓存网络或本地的图像资源。这个框架极大地优化了图片在Android应用中的显示,尤其是在...
在`Android-Universal-Image-Loader-master`中,我们可以看到项目的源代码结构,包括核心的`library`模块和示例应用`sample`模块。通过对源码的阅读和分析,开发者可以深入理解其工作原理,进一步优化使用。 五、与...