Universal-Image-Loader(UIL)图片加载框架使用简单介绍

这个也是最近项目中使用到的第三方图片加载框架,在这里也自己总结一下,简单的介绍一些使用的方式。

UIL图片加载框架特点

简介:
  • 项目地址:https://github.com/nostra13/Android-Universal-Image-Loader
  • 异步加载图片或者加载大量图片经常会遇到图片错乱或者OOM等相关问题。UIL图片缓存,目前使用最广泛的图片缓存,支持主流图片缓存的绝大多数特性。

    我们看下该图片加载的三级缓存原理

特点:
   1.多线程下载图片,图片可以来源于网络,文件系统,项目文件夹assets中以及drawable中等
   2.支持随意的配置ImageLoader,例如线程池,图片下载器,内存缓存策略,硬盘缓存策略,图片显示选项以及其他的一些配置
   3.支持图片的内存缓存,文件系统缓存或者SD卡缓存
   4.支持图片下载过程的监听
   5.根据控件(ImageView)的大小对Bitmap进行裁剪,减少Bitmap占用过多的内存
   6.较好的控制图片的加载过程,例如暂停图片加载,重新开始加载图片,一般使用在ListView,GridView中,滑动过程中暂停加载图片,停止滑动的时候去加载图片
   7.提供在较慢的网络下对图片进行加载

UIL图片加载框架使用讲解

第一步,项目引入

ImageLoader Jar包引入项目中:https://github.com/nostra13/Android-Universal-Image-Loader/raw/master/downloads/universal-image-loader-1.9.5.jar

或者是下载这个项目,然后导入到工程中,使用库依赖的方式进行引用,如果还不太懂怎么导入demo和库依赖,可以看下

AndroidStudio导入本地和github项目,以及怎么添加第三方依赖介绍

第二步
配置ImageLoder参数(ImageLoaderConfiguration)
       ImageLoaderConfiguration configuration = ImageLoaderConfiguration
                .createDefault(this);
第三步
初始化ImageLoader  ImageLoader.getInstance()
第四步
displayImage(), loadImage(),loadImageSync()

好了,我们开始加载图片吧。

这个时候,我们需要配置imageloader的参数,也就是在application里面配置,这里我们的application使用的是单例模式:

public class MyApplication extends Application{

    private static MyApplication instance=null;
    @Override
    public void onCreate() {
        super.onCreate();
        this.instance=this;
        initImageLoader(getApplicationContext());
    }
    public static MyApplication getInstance(){
        return instance;
    }

    private void initImageLoader(Context context){
        File cacheDir = StorageUtils.getCacheDirectory(context);
        ImageLoaderConfiguration configuration = new ImageLoaderConfiguration
                .Builder(context)
                .threadPoolSize(5)//线程池
                .diskCache(new UnlimitedDiskCache(cacheDir))//内存卡
                .threadPriority(Thread.NORM_PRIORITY -2)//线程优先级
                .denyCacheImageMultipleSizesInMemory()
                .memoryCache(new LargestLimitedMemoryCache(2 * 1024 * 1024))//内存缓存
                .memoryCacheSize(2 * 1024 * 1024)//内存缓存大小
                .diskCacheSize(50 * 1024 * 1024)//存储卡缓存大小
                .diskCacheFileCount(100)//存储卡文件个数
                .memoryCacheSizePercentage(13) // default
                .diskCacheFileNameGenerator(new HashCodeFileNameGenerator()) // default
                .imageDownloader(new BaseImageDownloader(this, 5 * 1000, 30 * 1000)) // default
                .defaultDisplayImageOptions(DisplayImageOptions.createSimple()) // default
                        //.writeDebugLogs()
                .tasksProcessingOrder(QueueProcessingType.FIFO)  //先进先出
                .build();
                ImageLoader.getInstance().init(configuration);
    }

}

接下来,我们就要获取imageloader的实例,和设置DisplayImageOptions的参数,这里我附上一张DisplayImageOptions配置图:

       mImageLoader = ImageLoader.getInstance();
        mOptions = new DisplayImageOptions.Builder()
                .showImageOnLoading(R.mipmap.ic_launcher)//图片加载的时候显示的默认图
                .showImageForEmptyUri(R.mipmap.ic_launcher)//图片的地址为空的时候显示的图
                .showImageOnFail(R.mipmap.ic_launcher)//图片加载失败的时候显示
                .cacheOnDisk(true)   //设置保存在sdcard中
                .cacheInMemory(true) //设置保存在内存当中
                .build();

最后我们就要加载图片了:

加载之前:

加载成功后:

是不是很简单呢,而且配置也是通俗易懂的,不过不幸的是,这个框架,已经停止了更新,不过我相信,这么优秀的开源框架,还是会有很多人记着的。当然了哈,我的项目中用到的也就是加载图片,并没有用到其他的厉害的方法,比如

// Load image, decode it to Bitmap and display Bitmap in ImageView (or any other view
//  which implements ImageAware interface)
imageLoader.displayImage(imageUri, imageView, options, new ImageLoadingListener() {
    @Override
    public void onLoadingStarted(String imageUri, View view) {
    //开始加载
        ...
    }
    @Override
    public void onLoadingFailed(String imageUri, View view, FailReason failReason) {
    //加载失败
        ...
    }
    @Override
    public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
    //加载完成
        ...
    }
    @Override
    public void onLoadingCancelled(String imageUri, View view) {
    //加载取消
        ...
    }
}, new ImageLoadingProgressListener() {
    @Override
    public void onProgressUpdate(String imageUri, View view, int current, int total) {
    //加载百分比
        ...
    }
});
// Load image, decode it to Bitmap and return Bitmap to callback
ImageSize targetSize = new ImageSize(80, 50); // result Bitmap will be fit to this size
imageLoader.loadImage(imageUri, targetSize, options, new SimpleImageLoadingListener() {
    @Override
    public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
        // Do whatever you want with Bitmap
    }
});
// Load image, decode it to Bitmap and return Bitmap synchronously
ImageSize targetSize = new ImageSize(80, 50); // result Bitmap will be fit to this size
Bitmap bmp = imageLoader.loadImageSync(imageUri, targetSize, options);

好了,想要了解更多的有关Universal-Image-Loader,可以去官网下载下来慢慢研究,这里就不多做解释了哈。

时间: 2024-10-13 17:51:53

Universal-Image-Loader(UIL)图片加载框架使用简单介绍的相关文章

github图片加载框架glide使用介绍

简介: glide为Android上一个专注于图像加载和缓存的库. 使用步骤: 一:导包 在项目目录下,打开build.gradle文件,输入以下代码: repositories { mavenCentral() } dependencies { compile fileTree(include: ['*.jar'], dir: 'libs') compile 'com.android.support:appcompat-v7:22.1.1' compile 'com.github.bumpte

一起写一个Android图片加载框架

本文会从内部原理到具体实现来详细介绍如何开发一个简洁而实用的Android图片加载缓存框架,并在内存占用与加载图片所需时间这两个方面与主流图片加载框架之一Universal Image Loader做出比较,来帮助我们量化这个框架的性能.通过开发这个框架,我们可以进一步深入了解Android中的Bitmap操作.LruCache.LruDiskCache,让我们以后与Bitmap打交道能够更加得心应手.若对Bitmap的大小计算及inSampleSize计算还不太熟悉,请参考这里:高效加载Bit

Android中常见的图片加载框架

图片加载涉及到图片的缓存.图片的处理.图片的显示等.而随着市面上手机设备的硬件水平飞速发展,对图片的显示要求越来越高,稍微处理不好就会造成内存溢出等问题.很多软件厂家的通用做法就是借用第三方的框架进行图片加载. 开源框架的源码还是挺复杂的,但使用较为简单.大部分框架其实都差不多,配置稍微麻烦点,但是使用时一般只需要一行,显示方法一般会提供多个重载方法,支持不同需要.这样会减少很不必要的麻烦.同时,第三方框架的使用较为方便,这大大的减少了工作量.提高了开发效率.本文主要介绍四种常用的图片加载框架,

【光速使用开源框架系列】图片加载框架ImageLoader

[关于本系列] 最近看了不少开源框架,网上的资料也非常多,但是我认为了解一个框架最好的方法就是实际使用.本系列博文就是带领大家快速的上手一些常用的开源框架,体会到其作用. 由于作者水平有限,本系列只会描述如何快速的使用框架的基本功能,更多的详细设置大家可以在这些项目的页面上找到. [介绍]: ImageLoader作为一款开源的异步图片加载框架,在Android开发中经常被使用到,该控件可以加载和显示图片.并且对其进行缓存,提供了很多方便的选项帮助开发者们快速达到开发需求. [GitHub页面]

Android 框架练成 教你打造高效的图片加载框架

转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/41874561,本文出自:[张鸿洋的博客] 1.概述 优秀的图片加载框架不要太多,什么UIL , Volley ,Picasso,Imageloader等等.但是作为一名合格的程序猿,必须懂其中的实现原理,于是乎,今天我就带大家一起来设计一个加载网络.本地的图片框架.有人可能会说,自己写会不会很渣,运行效率,内存溢出神马的.放心,我们拿demo说话,拼得就是速度,奏事这么任性.

优雅地实现Android主流图片加载框架封装,可无侵入切换框架

项目开发中,往往会随着需求的改变而切换到其它图片加载框架上去.如果最初代码设计的耦合度太高,那么恭喜你,成功入坑了.至今无法忘却整个项目一行行去复制粘贴被支配的恐惧.:) 那么是否存在一种方式 能够一劳永逸地解决这个痛点呢?下面我们来分析一下图片加载框架面对的现状和解决思路. 问题现状 一个优秀的框架一般在代码设计的时候已经封装很不错了,对于开发者而言框架的使用也是很方便,但是为什么说我们往往还要去做这方面的框架封装呢?原因很简单,实际项目开发中,我们不得不面对着日新月异的需求变化,想要在这个变

常用图片加载框架

我们在项目中使用的是Picasso.其实现在的主流图片加载框架除了Picasso还有ImageLoader,Glide,以及Fresco.ImageLoader是比较老的框架了,稳定, 加载速度适中, 缺点在于不支持GIF图片加载, 使用稍微繁琐, 并且缓存机制没有和http的缓存很好的结合, 完全是自己的一套缓存机制.Glide是谷歌的一位工程师开发的,它可以说是Picasso的升级版, 有Picasso的优点, 并且支持GIF图片加载显示, 图片缓存也会自动缩放, 默认使用RGB_565格式

iOS图片加载框架学习之FlyImage

在iOS开发中,其图片加载新框架FlyImage 整合了SDWebImage,FastImageCache,AFNetworking的优点,是一个新的性能高效.接口简单的图片加载框架,下面小编就和大家一起来扒一扒这个框架. 特点 高效 可将多张小图解码后存储到同一张大图上,在同屏渲染多图时,效率极高: 支持 mmap 内存映射,高效的I/O操作,减少一次文件拷贝操作,同时减少内存占用: 支持 Byte Alignment 字节对其,渲染过程中,避免执行 CA::Render::copy_imag

关于图片加载框架

接上篇,这篇开始对现在比较的流行的第三方图片加载框架做一个对比总结. 这篇文章介绍内容如下: 1.目前流行的图片加载框架有什么? 2.各自的使用方法 3.各自的优缺点 4.优化问题 一.目前流行的图片加载框架有什么? ImageLoader   Glide  Picasso  Fresso(2015年) 注:由于现在ImageLoader使用较少,本篇博文将不再对它进行阐述.主要以其它三个框架为主,有兴趣的同学可以自行学习. 二.各自的使用方法 Picasso:  Picasso .with(t