Glide的优点

Gilde的优点
1、图片占用内存回收及时,能减少因内存不足造成的崩溃,生命周期和Activity/Fragment一致。 (重要的特性)
2、默认Bitmap格式是RGB_565,减少内存资源占用。
3、glide比universal-image-loader占用的内存要小一些。
4、图片显示效果为渐变,更加平滑。
5、glide可以将任何的本地视频解码成一张静态图片。
6、支持 Gif、WebP、缩略图

Picasso和Gilde的区别

1.Picasso和Glide的withi后面的参数不同
Picasso.with(这里只能传入上下文) .
Glide.with,后面可以传入上下文,activity实例,FragmentActivity实例,Fragement.传入的对象要比前者多.
2.加载后图片质量不同
Picasso采用的ARGB-8888,Glide采用的是RGB-565
相对而言,Picasso加载的是全图,图片质量和清晰对要比Glide的要高,但是,因为加载的采样率过高,导致,出现OOM异常的概率要比Glide要大很多.
3.加载Gif图片(备注:Gif图片消耗太对内存,尽量谨慎使用):
Picasso不能加载git图片
Glide可以加载缓存图片
4.缓存策略和加载速度.
Picasso缓存的是全尺寸,而 Glide的缓存的更ImageView的尺寸相同.
讲ImageView调整为不同的大小,不管大小如何设置,Picasso只缓存一个全尺寸的,Glide则不同,他会为每种大小不一致的ImageView都缓存一次.
Glide的这个特点,让加载显得特别的快,而Picasso则因为需要在显示之前重新调整大小而导致一些延迟,(即便是添加了
noFade)
5.总结:
Glide比Picasso加载速度要快,其实他是在Picasso的基础上进行了第二次封装,但是Glide比Picasso需要更多的空间来缓存;Glide加载图像以及磁盘缓存的方式,都优于Picasso,且Glide更有利于减少OutOfMemoryError的发生;
Gif动画,是Glide的杀手锏.
(参考来源:http://blog.csdn.net/wolfking0608/article/details/70196369)

Glide的缓存

    //加载错误时的图片
        Glide.with(this)
                .load(splash_url)
                .placeholder(R.drawable.splash_bg)
                .skipMemoryCache(true)
                .diskCacheStrategy(DiskCacheStrategy.RESULT)
                .into(mSpBgImage);

.skipMemoryCache(true):是跳过内存缓存的意思,这个也只是影响内存缓存,Glide为了以后的网络请求还是会缓存到磁盘中。
由于Glide默认会将所有的图片资源缓存到内存中,因此,没有必要手动调用.skipMemoryCache( false )了

diskCacheStrategy(DiskCacheStrategy.RESULT):跳过内存缓存的意思

  • DiskCacheStrategy.NONE 啥也不缓存
  • DiskCacheStrategy.SOURCE 只缓存全尺寸图. 上面例子里的1000x1000像素的图片
  • DiskCacheStrategy.RESULT 只缓存最终降低分辨后用到的图片
  • DiskCacheStrategy.ALL 缓存所有类型的图片 (默认行为)

如果你有一张不段变化的图片,但是都是用的同一个URL,你可能需要禁止磁盘缓存了

Picasso只缓存全尺寸图片。Glide,会缓存原始,全尺寸的图片和额外的小版本图片。例如,如果你请求一个1000x1000像素的图片,你的ImageView是500x500像素,Glide会保存两个版本的图片到缓存里。

如果你有一个图片你需要经常处理它,会生成各种不同的版本的图片,缓存它的原始的分辨率图片才有意义。这样,我们使用DiskCacheStrategy.SOURCE去告诉Glide只缓存原始版本:
(参考来源:https://www.jianshu.com/p/f5cc71c8eb3f)

Glide的加载资源
从Res资源中加载
从文件中加载
从Uri加载
Glide的方法
placeHolder() :占位符
.error():出错的显示图片
crossFade():让图片的切换更平滑
dontAnimate():没有动画效果
override(horizontalSize, verticalSize):它会在将图片显示在ImageView之前调整图片的大小
CenterCrop():会缩放图片让图片充满整个ImageView的边框,然后裁掉超出的部分,ImageVIew会被完全填充满,但是图片可能不能完全显示出。
fitCenter():会缩放图片让两边都相等或小于ImageView的所需求的边框。图片会被完整显示,可能不能完全填充整个ImageView。
.asGif():如果提供的源不是Gif,可能是一个普通的图片。作为开发者,你当然希望那个URL是一个Gif,但Glide不能自动检测到底是不是,这样引入了一个额外的方法asGif()强迫生成一个Gif,果gifUrl是一个gif,没有异常发生。但如果gifUrl不是一个Gif,即使是一个完好的图片(非Gif),Glide也会加载失败。.error()回调方法会被调用,并加载错误占位图。
.asBitmap():只是想要显示Gif的第一帧,当URl指向的的确是Gif,你可以调用asBitmap()将其作为常规图片显示。

播放本地视频:load( Uri.fromFile( new File( filePath ) ) )只能播放本地的视频,网路的不可以
实际中加载gif并没有上述的那么简单,可能会遇到很多问题:

  • 比如加载慢,比如OOM。
    1.git图片大小,图片格式是否正确,你可以查看下你需要加载的gif图片大小,需要多长时间。太大的图片,加载慢,又浪费流量,不利于用户体验。
    2.网速是不是正常?从chrome里加载一下,看需要多长时间。
    3.磁盘缓存策略问题。加载gif,就磁盘缓存还能设置全局缓存么?压缩调整gif大小,重新编码,是不是很消耗时间?官方给的方法是使用用:.diskCacheStrategy(DiskCacheStrategy.SOURCE)
    4.在ListView等列表控件中滑动的时候,考虑添加 Glide.with(context).pause|resumeRequests() ,可以参考github上的开发者答复
    5.开启Glide的相关log,查看异常原因,具体问题具体分析。不会开启的,请阅读 异常: 调试和报错处理。
    6.还不能解决,再访问https://github.com/bumptech/glide,看一下里面的issue,搜索一下跟你代码相关的关键字

.priority( Priority.HIGH ):按照优先级加载图片

  • Priority.LOW
  • Priority.NORMAL
    -Priority.HIGH
  • Priority.IMMEDIATE

.thumbnail( 0.1f ):先加载缩略图,还可以原图与缩略图完全不同
(详细:https://www.jianshu.com/p/db30bb036b89)
来源链接:https://www.jianshu.com/p/1697f79d1579

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值