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