博客转移到个人站点:
http://www.wangchengmeng.club/2018/02/04/Glide%E5%A4%A7%E6%88%98Picasso/
欢迎来吐槽
Picasso
介绍
首先Picasso是是Square公司开源的一个Android图形缓存库,使用起来非常简单,而且效率比较高
优点:
在adapter中回收和取消当前的下载;
使用复杂的图片压缩转换来尽可能的减少内存消耗;
自动的内存和硬盘缓存;
图形转换操作,如变换大小,旋转等,提供了接口来让用户可以自定义转换操作;
加载载网络或本地资源;
还解决了列表显示图片错位的问题,没显示的列表自动不加载图片
1、加载并显示网络图片
Picasso.with(context).load("http://www.baidu.com/
aaa.png").into(imageView);
2、转换图片以适应布局大小并减少内存占用
Picasso.with(context)
.load(url)
.resize(50, 50)
.centerCrop()
.into(imageView);
3、picasso提供了两种占位图片
Picasso.with(context)
.load(url)
.placeholder(R.drawable.user_placeholder)
.error(R.drawable.user_placeholder_error)
.into(imageView);
4、除了加载网络图片picasso还支持加载Resources, assets, files, content providers中的资源文件
Picasso.with(context).load(R.drawable.landing_screen).into(imageView1);
Picasso.with(context).load(new File(...)).into(imageView2);
5、使用的时候可以加上Picasso.noFade(); 这个方法立即显示,但还是没Glide快。
Glide
两者相似度达到90%之多,使用起来一样,只是Glide在实现的细节上更加优秀,个人更加喜欢Glide的使用
glide的使用:
Glide.with(context)
.load("http://inthecheesefactory.com/uploads/source/glidepicasso/cover.jpg")
.into(ivImg);
glide修改参数配置:
修改缓存的配置(缓存位置,大小等)
地址:https://github.com/bumptech/glide/wiki/Configuration
两者对战
1、Glipde接收Activity和Fragment的context会自动转换,这样就可以跟Activity和Fragment的生命周期绑定在一起了,比如在
Activity的Pause状态下就停止加载,在Resume状态下就自动继续加载。而Picasso不行,只能接收Cntext参数
2、在缓存图片上:Glide默认采用的图片格式是RGB_565,而Picasso默认是RGB_8888,在消耗内存的情况下Glide会小两倍都不止,
当然你也可以给Glide设置格式为RGB_8888,图片效果 会好些,消耗内存还是比Picasso小很多。
在缓存图片的时候,Glide会将图样的图片不同大小的尺寸都缓存一份,但这样会多次去请求网络加载图片,可以改变这样的情况:
3、Glide.diskCacheStrategy(DiskCacheStrategy.ALL) 就是缓存全尺寸的图片(Picasso就是缓存全尺寸的图片),
在下次任何尺寸的imageview加载图片的时候只需要将全尺寸的图片从缓存中取出来,重新计算一次大小,然后缓存,这样就很快。
而Picasso在显示之前会重新计算一下大小就会有所延迟。
所以Glide比Picasso更快。但是需要比Picasso更大的缓存空间。
4、动画:
Glide可以配置图片显示的动画,而Picasso只有一种动画,
Glide还可以显示Gif动画,但是使用的时候需要谨慎,自己测试过,需要消耗大量的内存
5、库的大小:
picasso大概118k而gilde大概430k
6、方法的个数:
picasso--glide === 840--2678
对于DEX文件65535个方法的限制来说,2678是一个相当大的数字了。建议在使用Glide的时候开启ProGuard。
总结
综上所述,这两个库在图片的加载缓存上都是比较优秀的,只是在细节体现上Glide更为优秀,两者各有个的优势,使用的时候看自己选择使用。
Glide更有利于减少OutOfMemory,且图片显示更快,但是需要更大的缓存空间。