universal-imageloader加载图片的特色:html
基本特色以下,android
多线程下载图片,图片能够来源于网络,文件系统,项目文件夹assets中以及drawable中等缓存
支持随意的配置ImageLoader,例如线程池,图片下载器,内存缓存策略,硬盘缓存策略,图片显示选项以及其余的一些配置网络
支持图片的内存缓存,文件系统缓存或者SD卡缓存多线程
支持图片下载过程的监听app
根据控件(ImageView)的大小对Bitmap进行裁剪,减小Bitmap占用过多的内存ide
较好的控制图片的加载过程,例如暂停图片加载,从新开始加载图片,通常使用在ListView,GridView中,滑动过程当中暂停加载图片,中止滑动的时候去加载图片ui
提供在较慢的网络下对图片进行加载spa
使用方法:.net
首先在自定义的application的oncreate方法中建立UIL的配置参数,能够直接使用createDefault()方法建立一个默认的ImageLoaderConfiguration,固然咱们还能够本身设置ImageLoaderConfiguration,设置以下
File cacheDir = StorageUtils.getCacheDirectory(context); ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(context) .memoryCacheExtraOptions(480, 800) // default = device screen dimensions .diskCacheExtraOptions(480, 800, CompressFormat.JPEG, 75, null) .taskExecutor(...) .taskExecutorForCachedImages(...) .threadPoolSize(3) // default .threadPriority(Thread.NORM_PRIORITY - 1) // default .tasksProcessingOrder(QueueProcessingType.FIFO) // default .denyCacheImageMultipleSizesInMemory() .memoryCache(new LruMemoryCache(2 * 1024 * 1024)) .memoryCacheSize(2 * 1024 * 1024) .memoryCacheSizePercentage(13) // default .diskCache(new UnlimitedDiscCache(cacheDir)) // default .diskCacheSize(50 * 1024 * 1024) .diskCacheFileCount(100) .diskCacheFileNameGenerator(new HashCodeFileNameGenerator()) // default .imageDownloader(new BaseImageDownloader(context)) // default .imageDecoder(new BaseImageDecoder()) // default .defaultDisplayImageOptions(DisplayImageOptions.createSimple()) // default .writeDebugLogs() .build();
在项目中不须要每个都本身设置,通常使用createDefault()建立的ImageLoaderConfiguration就能使用,而后调用ImageLoader的init()方法将ImageLoaderConfiguration参数传递进去,ImageLoader使用单例模式。
ImageLader提供了几个图片加载的方法,主要是这几个displayImage(), loadImage(),loadImageSync(),loadImageSync()方法是同步的,android4.0有个特性,网络操做不能在主线程,因此loadImageSync()方法咱们就不去使用。
在实际的开发中,咱们会用到DisplayImageOptions,他能够配置一些图片显示的选项,好比图片在加载中ImageView显示的图片,是否须要使用内存缓存,是否须要使用文件缓存等等,可供咱们选择的配置以下:
DisplayImageOptions options = new DisplayImageOptions.Builder() .showStubImage(R.drawable.default_cover) .showImageForEmptyUri(R.drawable.default_cover) .showImageOnFail(R.drawable.default_cover) .cacheInMemory(true) .cacheOnDisc(true) .imageScaleType(ImageScaleType.NONE) .bitmapConfig(Bitmap.Config.RGB_565)//设置为RGB565比起默认的ARGB_8888要节省大量的内存.delayBeforeLoading(100)//载入图片前稍作延时能够提升总体滑动的流畅度.build();
loadImage()加载图片的方法:
ImageLoader.getInstance().loadImage(imageUrl, mImageSize, options, new SimpleImageLoadingListener(){ @Override public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) { super.onLoadingComplete(imageUri, view, loadedImage); mImageView.setImageBitmap(loadedImage); } });
使用DisplayImage()方法更加方便:
ImageLoader.getInstance().displayImage(imageUrl, mImageView, options);
在使用listview或者gridview加载图片的时候每每会须要设置滑动时图片加载监听事件:
listView.setOnScrollListener(new PauseOnScrollListener(imageLoader, pauseOnScroll, pauseOnFling)); gridView.setOnScrollListener(new PauseOnScrollListener(imageLoader, pauseOnScroll, pauseOnFling));
第一个参数就是咱们的图片加载对象ImageLoader, 第二个是控制是否在滑动过程当中暂停加载图片,若是须要暂停传true就好了,第三个参数控制猛的滑动界面的时候图片是否加载。
基本的图片加载使用上述方法就能够实现了,还有一些关于加载图片出现OOM的一些问题,经过以下设置基本能够解决:
减小线程池中线程的个数,在ImageLoaderConfiguration中的(.threadPoolSize)中配置,推荐配置1-5
在DisplayImageOptions选项中配置bitmapConfig为Bitmap.Config.RGB_565,由于默认是ARGB_8888, 使用RGB_565会比使用ARGB_8888少消耗2倍的内存
在ImageLoaderConfiguration中配置图片的内存缓存为memoryCache(new WeakMemoryCache()) 或者不使用内存缓存
在DisplayImageOptions选项中设置.imageScaleType(ImageScaleType.IN_SAMPLE_INT)或者imageScaleType(ImageScaleType.EXACTLY)
若是有什么问题能够在评论上相互交流,共同进步哈
关于listview加载图片出现卡顿现象的缘由能够参考这篇博文:http://www.cnblogs.com/wuxilin/p/universal_image_loader_onscroll_reload.html
该文章参考这篇博文:http://blog.csdn.net/xiaanming/article/details/26810303