android图片加载库的使用对比

1.Android-Universal-Image-Loader

giehub地址::https://github.com/nostra13/Android-Universal-Image-Loader

这个框架是我最早使用的一款老牌框架,至今仍有许多开发者在用,不过该项目已经不再继续维护了,所以在此不推荐使用

使用方法:在自定义的application里进行配置,可参考以下代码:

       //创建默认的ImageLoader配置参数
        ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(
                this)
                .memoryCacheExtraOptions(600, 600)
                        // max width, max height,即保存的每个缓存文件的最大长宽
                .threadPoolSize(3)
                        // 线程池内加载的数量
                .threadPriority(Thread.NORM_PRIORITY - 2)
                .denyCacheImageMultipleSizesInMemory()
                .memoryCache(new WeakMemoryCache()) // 弱缓存,缓存bitmap的总大小没有限制,唯一不足的地方就是不稳定,缓存的图片容易被回收掉
//                .memoryCache(new UsingFreqLimitedMemoryCache(2 * 1024 * 1024))//建议内存设在5-10M,可以有比较好的表现
                        // You can pass your own memory cache
                        // implementation/你可以通过自己的内存缓存实现
                .memoryCacheSize(2 * 1024 * 1024)
                .discCacheSize(50 * 1024 * 1024)
                .discCacheFileNameGenerator(new Md5FileNameGenerator())
                        // 将保存的时候的URI名称用MD5 加密
                .tasksProcessingOrder(QueueProcessingType.LIFO)
                .discCacheFileCount(100)
                        // 缓存的文件数量
                .discCache(
                        new UnlimitedDiscCache(new File(Environment
                                .getExternalStorageDirectory()
                                + "/Westwinglife/imgCache")))
                        // 自定义缓存路径
                .defaultDisplayImageOptions(getDisplayOptions())
                .imageDownloader(
                        new BaseImageDownloader(this, 5 * 1000, 30 * 1000))
                .writeDebugLogs() // Remove for release app
                .build();// 开始构建
        ImageLoader.getInstance().init(config);


options的配置可全局配置,也可对具体加载项单独配置,具体代码可参考:


    public DisplayImageOptions getDisplayOptions() {
        DisplayImageOptions options;
        options = new DisplayImageOptions.Builder()
                .showImageOnLoading(R.drawable.defult_good_img) // 设置图片在下载期间显示的图片
                .showImageForEmptyUri(R.drawable.defult_good_img)// 设置图片Uri为空或是错误的时候显示的图片
                .showImageOnFail(R.drawable.defult_good_img) // 设置图片加载/解码过程中错误时候显示的图片
                .cacheInMemory(true)// 设置下载的图片是否缓存在内存中
                .cacheOnDisc(true)// 设置下载的图片是否缓存在SD卡中
                .considerExifParams(true) // 是否考虑JPEG图像EXIF参数(旋转,翻转)
                .imageScaleType(ImageScaleType.IN_SAMPLE_INT)// 设置图片以如何的编码方式显示
//                .imageScaleType(ImageScaleType.EXACTLY_STRETCHED)// 设置图片以如何的编码方式显示
                .bitmapConfig(Bitmap.Config.RGB_565)// 设置图片的解码类型//
                        // .delayBeforeLoading(int delayInMillis)//int
                        // delayInMillis为你设置的下载前的延迟时间
                        // 设置图片加入缓存前,对bitmap进行设置
                        // .preProcessor(BitmapProcessor preProcessor)
                .resetViewBeforeLoading(true)// 设置图片在下载前是否重置,复位
                .displayer(new RoundedBitmapDisplayer(20))// 是否设置为圆角,弧度为多少
                .displayer(new FadeInBitmapDisplayer(100)) // 是否图片加载好后渐入的动画时间
                .build();// 构建完成

        return options;
    }
这样配置完成之后就可以在项目中使用了, imageLoader.displayImage方法简单易用,第一次使用的时候感觉非常棒,单例模式,三级缓存,各种状态 图片的配置显示.配置好的话还可以避免很多oom的问题


2.Picasso
giehub地址:https://github.com/square/picasso
picassoSquare公司开源的一个Android图形缓存库,可以实现图片下载和缓存功能。仅仅只需要一行代码就能完全实
现图片的异步加载:
dependencies {  
    compile 'com.squareup.picasso:picasso:2.5.1'  
} 


Picasso.with(context).load("http://i.imgur.com/DvpvklR.png").into(imageView);


这也是一款老牌的图片加载库,不过和UIL生在同一时期光芒必定会被有所遮盖,不过随着UIL的停止维护,Picasso的
光芒也将绽放
3.Glide
giehub地址:https://github.com/bumptech/glide
在泰国举行的谷歌开发者论坛上,谷歌为我们介绍了一个名叫 Glide 的图片加载库,作者是bumptech。这个库被广泛的运用在google的开源项目中,
包括2014年google I/O大会上发布的官方app。这是一款比较流行的图片加载框架,傻瓜式的集成和使用吸引了大量的开发者,而且它的内存优化和
加载速度也是非常给力的,Glide 默认的 Bitmap 格式是 RGB_565 格式,相较于Picasso的ARGB_8888的格式,内存开销减少一半,
最重要的一个特性是 Glide 支持加载 Gif 动态图,而 Picasso 不支持该特性。
dependencies {  
    compile 'com.github.bumptech.glide:glide:3.5.2'  
    compile 'com.android.support:support-v4:22.0.0'  
} 
Glide.with(context)  
    .load("http://inthecheesefactory.com/uploads/source/glidepicasso/cover.jpg")  
    .into(ivImg);  


4.Fresco
giehub地址:https://github.com/facebook/fresco
Fresco 是 Facebook 出品,他是新一代的图片加载库,我们知道 Android 应用程序可用的内存有限,经常会因为图片加载导
致 OOM ,虽然我们有各种手段去优化,尽量减少出现 OOM 的可能性,但是永远没法避免,尤其某些低端手机 OOM 更是严重。
Facebook 就另辟蹊径,既然没法在 Java 层处理,我们就在更底层的 Native 堆做手脚。于是 Fresco 将图片放到一个特别的
内存区域叫 Ashmem 区,就是属于 Native 堆,图片将不再占用 App 的内存,Java 层对此无能为力,这里是属于 C++ 的地盘,
所以能大大的减少 OOM。后期的这些图片加载框架的集成和使用都是越来越简单方便,Fresco的集成和使用和glide差不多.
不能说越新的框架越好,但至少趋势是这样,Fresco库比较大,比较适合含有大量图片的APP去使用,实乃加载大图之必备良品,而一般的
应用使用Picasso或者glide完全可以搞定
这里推荐Fresco的中文网,里面可以满足你几乎所有的需求:https://www.fresco-cn.org/docs/index.html




写这篇博客的目的仅作工作记录,留以后查看

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值