首页 > 代码库 > android图片缓存框架Android-Universal-Image-Loader

android图片缓存框架Android-Universal-Image-Loader

最近跟同学们做了一个创业项目,其实跟以前做项目不同,以前大多数都是做web网站,对内存管理这些不太关注,因为是pc机,做android的话也就是一些小列子,现在到了做产品阶段吧,只能把项目做到最优。不扯了,先来说这个框架是做什么的,Android-Universal-Image-Loader主要是一个图片的缓存框架,根据官方解释就是,它提供了一个异步处理图片的方案。它提供两种获取图片方式async or sync,并且提供了一个可定制化的组件(thread executors, downloader, decoder, memory and disk cache, display image options, etc),它会把图片首先缓存到本地,然后在从本地进行读取这些图片,

这是官方使用的效果图


    先来说说怎么使用它:首先在github上面下载Android-Universal-Image-Loader,加入到你的android项目里面,然后记得一定要加上这两个权限,否则这个缓存框架是不能够使用的

<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" />
    ...
    <application android:name="MyApplication">
        ...
    </application>
</manifest>
然后在代码里对该缓存框架进行配置,之所以说它是一个很灵活的东西,是因为它里面的大多数参数都可以手动配置,组件通用化程度高,几乎不需要进行复写。

这是我大概根据官方文档翻译的一些配置,其实对于大家来说,用默认的即可,除非是有特殊要求。





先开始使用的第一步:

配置ImageLoaderConfiguration这个类实现全局ImageLoader

ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(
				activity)
				.memoryCacheExtraOptions(640, 480)
				// 保存每个缓存图片的最大长和宽
				.threadPoolSize(3)
				// 线程池的大小 这个其实默认就是3
				.memoryCacheSize(2 * 1024)
				// 设置缓存的最大字节
				.denyCacheImageMultipleSizesInMemory()
				// 缓存显示不同大小的同一张图片
				.imageDownloader(
						new BaseImageDownloader(activity, 5 * 1000, 30 * 1000)) // connectTimeout
				// s)超时时间
				.build();
		ImageLoader imageLoader = ImageLoader.getInstance();
		imageLoader.init(config);

这是我大概需要的一些参数配置。

第二步

配置一些图片选项

DisplayImageOptions options;
		options = new DisplayImageOptions.Builder()
				.showImageOnLoading(R.drawable.ic_launcher) // 设置图片在下载期间显示的图片
				.showImageForEmptyUri(R.drawable.ic_launcher)// 设置图片Uri为空或是错误的时候显示的图片
				.showImageOnFail(R.drawable.ic_launcher) // 设置图片加载/解码过程中错误时候显示的图片
				.cacheInMemory(true)// 设置下载的图片是否缓存在内存中
				.cacheOnDisk(true)// 设置下载的图片是否缓存在SD卡中
				.displayer(new FadeInBitmapDisplayer(100))// 是否图片加载好后渐入的动画时间
				.build();

这是大概的一个配置状况,在下一篇会用一个listView的实例来讲解这个框架的具体使用