关于为什么使用universalimageloader

本文详细介绍了如何使用UniversalImageLoader简化图片加载流程,并提供了初始化参数设置及DisplayImageOption的方法,同时对比了Volley和自定义异步线程在图片加载中的局限性。通过实际案例分析,展示了如何利用UniversalImageLoader实现更灵活的图片加载控制,包括加载进度显示、完成通知等功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在之前的使用中,一直是用volley和自己写异步线程来完成图片加载。

volley的加载有内存缓存,但是磁盘缓存我没有使用,不用的原因是:可能接触的时间短,对于它的整个过程没有了解全面,使用volley加载网络图片的步骤主要是使用其提供的NetWorkImageView,然后设置队列和loader对象:

mQueue = Volley.newRequestQueue(context);
mImageLoader = new ImageLoader(mQueue, new BitmapCache());
然后直接加载:

holder.imgHead.setDefaultImageResId(R.drawable.ic_com_sina_weibo_sdk_logo);
holder.imgHead.setErrorImageResId(R.drawable.ic_com_sina_weibo_sdk_logo);
holder.imgHead.setImageUrl(image_url, mImageLoader);

其中的加载过程和完成后的操作不能灵活来做,比如显示加载进度条,完成后给出通知什么的,没有具体的监听接口。

然后是自己来进行加载操作,使用异步线程,同样的我使用了lrudiskcache的方式,但是不知为什么在运行时报出异常错误,百度之后看到的是网友相同的错误下没能找到合适的解决方案,所以最后使用新的框架。

最后选择了universalimageloader,他的使用比较简洁,方法很全面。参数设置也很具体。

网上找了几个对于参数设置的帖子,有几个比较完善:

///////////////////////////////////////////////////////////////////////////////

http://my.oschina.net/u/1024921/blog/146081

先写一下初始化ImageLoader的各个参数的意思

在应用创建的时候就要先初始化ImageLoader

设置builder的参数:


?
1
2
3
4
5
6
7
8
9
10
11
12
ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(getApplicationContext())
//.memoryCacheExtraOptions(480, 800)//设置缓存图片时候的宽高最大值,默认为屏幕宽高
.discCacheExtraOptions( 480 , 800 , CompressFormat.JPEG, 75 ) //设置硬盘缓存,默认格式jpeg,压缩质量70
.threadPoolSize( 5 //设置线程池的最高线程数量
.threadPriority(Thread.NORM_PRIORITY) //设置线程优先级
.denyCacheImageMultipleSizesInMemory() //自动缩放
.memoryCache( new UsingFreqLimitedMemoryCache( 4 * 1024 * 1024 )) //设置缓存大小,UsingFrgLimitMemoryCache类可以扩展
//.discCache(new UnlimitedDiscCache(mContext.getCacheDir()))        //设置硬盘缓存
.discCacheFileNameGenerator( new HashCodeFileNameGenerator()) //unkown
.imageDownloader( new BaseImageDownloader(mContext, 3000 , 8000 ))
.defaultDisplayImageOptions(options); //如果需要打开缓存机制,需要自己builde一个option,可以是DisplayImageOptions.createSimple()
//.enableLogging();
然后设置DisplayImageOptions options;



?
1
2
3
4
5
6
7
8
9
DisplayImageOptions options= new DisplayImageOptions.Builder()
.cacheInMemory()        //开启内存缓存
//.cacheOnDisc()            //开启硬盘缓存
//.imageScaleType(ImageScaleType.IN_SAMPLE_INT) //缩放级别
.displayer( new FakeBitmapDisplayer())   //RoundedBitmapDisplayer(20)
.showStubImage(R.drawable.ic_launcher)
.showImageForEmptyUri(R.drawable.ic_launcher)
.showImageOnFail(R.drawable.ic_launcher)
.build();

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

http://www.apkbus.com/android-158110-1-1.html

本帖最后由 wangjuan223 于 2013-12-31 13:26 编辑


/**
   * Configuration所有配置简介
   */

                // 内存缓存的设置选项 (最大图片宽度,最大图片高度) 默认当前屏幕分辨率
                // .memoryCacheExtraOptions(480, 800)

                // 硬盘缓存的设置选项 (最大图片宽度,最大图片高度,压缩格式,压缩质量,处理器)
                // .discCacheExtraOptions(480, 800, CompressFormat.JPEG, 75, null)

                // 设置自定义加载和显示图片的线程池
                // .taskExecutor(DefaultConfigurationFactory.createExecutor(3,Thread.NORM_PRIORITY
                // - 1, QueueProcessingType.FIFO))

                // 设置自定义加载和显示内存缓存或者硬盘缓存图片的线程池
                // .taskExecutorForCachedImages(DefaultConfigurationFactory.createExecutor(3,Thread.NORM_PRIORITY
                // - 1, QueueProcessingType.FIFO))

                // 设置显示图片线程池大小,默认为3
                // 注:如果设置了taskExecutor或者taskExecutorForCachedImages 此设置无效
                // .threadPoolSize(3)

                // 设置图片加载线程的优先级,默认为Thread.NORM_PRIORITY-1
                // 注:如果设置了taskExecutor或者taskExecutorForCachedImages 此设置无效
                // .threadPriority(Thread.NORM_PRIORITY - 1)

                // 设置图片加载和显示队列处理的类型 默认为QueueProcessingType.FIFO
                // 注:如果设置了taskExecutor或者taskExecutorForCachedImages 此设置无效
                // .tasksProcessingOrder(QueueProcessingType.FIFO)

                // 设置拒绝缓存在内存中一个图片多个大小 默认为允许,(同一个图片URL)根据不同大小的imageview保存不同大小图片
                // .denyCacheImageMultipleSizesInMemory()

                // 设置内存缓存 默认为一个当前应用可用内存的1/8大小的LruMemoryCache
                // .memoryCache(new LruMemoryCache(2 * 1024 * 1024))

                // 设置内存缓存的最大大小 默认为一个当前应用可用内存的1/8
                // .memoryCacheSize(2 * 1024 * 1024)

                // 设置内存缓存最大大小占当前应用可用内存的百分比 默认为一个当前应用可用内存的1/8
                // .memoryCacheSizePercentage(13)

                // 设置硬盘缓存
                // 默认为StorageUtils.getCacheDirectory(getApplicationContext())
                // 即/mnt/sdcard/android/data/包名/cache/
                // .discCache(new
                // UnlimitedDiscCache(StorageUtils.getCacheDirectory(getApplicationContext())))

                // 设置硬盘缓存的最大大小
                // .discCacheSize(50 * 1024 * 1024)

                // 设置硬盘缓存的文件的最多个数
                // .discCacheFileCount(100)

                // 设置硬盘缓存文件名生成规范
                // 默认为new HashCodeFileNameGenerator()
                // .discCacheFileNameGenerator(new Md5FileNameGenerator())

                // 设置图片下载器
                // 默认为 DefaultConfigurationFactory.createBitmapDisplayer()
                // .imageDownloader(
                // new HttpClientImageDownloader(getApplicationContext(),
                // new DefaultHttpClient()))

                // 设置图片解码器
                // 默认为DefaultConfigurationFactory.createImageDecoder(false)
                // .imageDecoder(DefaultConfigurationFactory.createImageDecoder(false))

                // 设置默认的图片显示选项
                // 默认为DisplayImageOptions.createSimple()
                // .defaultDisplayImageOptions(DisplayImageOptions.createSimple())

                // 打印DebugLogs
                // .writeDebugLogs()

                // 建立
                // .build();
/**
   * DisplayImageOptions所有配置简介
   */
  // 设置图片加载时的默认图片
  // .showImageOnLoading(R.drawable.ic_chat_def_pic)
  // 设置图片加载失败的默认图片
  // .showImageOnFail(R.drawable.ic_chat_def_pic_failure)
  // 设置图片URI为空时默认图片
  // .showImageForEmptyUri(R.drawable.ic_chat_def_pic)
  // 设置是否将View在加载前复位
  // .resetViewBeforeLoading(false)
  // 设置延迟部分时间才开始加载
  // 默认为0
  // .delayBeforeLoading(100)
  // 设置添加到内存缓存
  // 默认为false
  // .cacheInMemory(true)
  // 设置添加到硬盘缓存
  // 默认为false
  // .cacheOnDisc(true)
  // 设置规模类型的解码图像
  // 默认为ImageScaleType.IN_SAMPLE_POWER_OF_2
  // .imageScaleType(ImageScaleType.IN_SAMPLE_POWER_OF_2)
  // 设置位图图像解码配置
  // 默认为Bitmap.Config.ARGB_8888
  // .bitmapConfig(Bitmap.Config.ARGB_8888)
  // 设置选项的图像解码
  // .decodingOptions(new Options())
  // 设置自定义显示器
  // 默认为DefaultConfigurationFactory.createBitmapDisplayer()
  // .displayer(new FadeInBitmapDisplayer(300))
  // 设置自定义的handler
  // 默认为new Handler()
  // .handler(new Handler())
  // 建立
  // .build();

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

http://www.haogongju.net/art/1993017

http://www.cnblogs.com/kissazi2/p/3886563.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值