Glide学习

这篇博客对比了Android中三个流行的图片加载库Glide、Picasso和Fresco。Glide在内存优化和加载速度上优于Picasso,且支持加载GIF图。Fresco以其三级缓存和图片处理能力著称,但使用相对复杂。Glide的内存和磁盘缓存策略使其在加载速度上占优,而Picasso的图片质量更高。
摘要由CSDN通过智能技术生成

这是之前保存的学习笔记, 现在上传保存一下

Glide学习

第一部分是 glide 的使用以及和 picasso 的对比

第二部分是 glide 与 fresco 的对比

1,glide库的地址

bumptech/glide

Glide是在Picasso基础上进行了优化改进, 所以这两个是没得挑的..Fresco是fackbook出品的,也很不错,比较

网络加载框架那个好?
里面说是 fresco相比较其他的图片加载框架有以下优势:

1,理解可能不准确,说是存储位置不在内存中或者内存占用极小,可以极大的减少了outofmemoryerror的风险,同时gc调用次数减少可以提高app性能

2,图片加载可以表示成进度条, 可以像浏览器那样,体验好

3,图片可以在周边任意裁剪,而不仅仅是居中显示 ,这个非常好用

4,图片可以本地调整大小,可以减少下载时候的oom问题

但是其缺点也有: 库比较大, 上手比较难

glide的优点是可以加载 gif图

2,基础用法: Glide是 Picasso 的进化版 . 1,内存优化更好 .2,加载速度更快

Picasso

Picasso.with(context)
     .load("http://inthecheesefactory.com/uploads/source/glidepicasso/cover.jpg")
     .into(ivImg);

Glide

Glide.with(context)
     .load("http://inthecheesefactory.com/uploads/source/glidepicasso/cover.jpg")
    .into(ivImg);

Glide更易用,因为Glide的with方法不光接受Context,还接受Activity 和 Fragment,Context会自动的从他们获取。

将Activity/Fragment作为with()参数的好处是:

图片加载会和Activity/Fragment的生命周期保持一致,比如 Paused状态在暂停加载,
在Resumed的时候又自动重新加载。所以我建议传参的时候传递Activity 和 Fragment给Glide,而不是Context。

Glide默认的Bitmap格式是RGB_565,比ARGB_8888格式的内存开销要小一半

如果你对默认的RGB_565效果还比较满意,可以不做任何事,但是如果你觉得难以接受,可以创建一个新的GlideModule将Bitmap格式转换到ARGB_8888:

1. public class GlideConfiguration implements GlideModule {
3.     @Override
4.     public void applyOptions(Context context, GlideBuilder builder) {
5.         // Apply options to the builder here.
6.         builder.setDecodeFormat(DecodeFormat.PREFER_ARGB_8888);
7.     }
8.  
9.     @Override
10.     public void registerComponents(Context context, Glide glide) {
11.         // register ModelLoaders here.
12.     }
13. }

同时在AndroidManifest.xml中将GlideModule定义为meta-data

<meta-data android:name="com.inthecheesefactory.lab.glidepicasso.GlideConfiguration"
    android:value="GlideModule"/>

原因在于Picasso是加载了全尺寸的图片到内存(这个全尺寸的意思是把原生的图片加载到了内存, 然后根据imageview来进行裁剪),然后让GPU来实时重绘大小。而Glide加载的大小和ImageView的大小是一致的,因此更小。

一: 指定加载图片的大小

Picasso.with(this)
 .load("http://nuuneoi.com/uploads/source/playstore/cover.jpg")
 .resize(768, 432)
 .into(ivImgPicasso);

但是问题在于你需要主动计算ImageView的大小,或者说你的ImageView大小是具体的值(而不是wrap_content),你也可以这样:

Picasso.with(this)
    .load("http://nuuneoi.com/uploads/source/playstore/cover.jpg")
    .fit()
    .centerCrop()
    .into(ivImgPicasso);

总结:Glide可以自动计算出任意情况下的ImageView大小。

二: 磁盘缓存

Picasso和Glide在磁盘缓存策略上有很大的不同。Picasso缓存的是全尺寸的,而Glide缓存的是跟ImageView尺寸相同的。

Picasso只缓存一个全尺寸的
Glide则不同,它会为每种大小的ImageView缓存 一次。尽管一张图片已经缓存了一次,但是假如你要在另外一个地方再次以不同尺寸显示,需要重新下载,调整成新尺寸的大小,然后将这个尺寸的也缓存起来

例如:假如在第一个页面有一个200x200的ImageView,在第二个页面有一个100x100的ImageView,这两个ImageView本来是要显示同一张图片,却需要下载两次。
不过,你可以改变这种行为,让Glide既缓存全尺寸又缓存

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值