Glide、Picasso原理

Glide、Picasso原理

参考网址:

https://www.cnblogs.com/huangjie123/p/6130665.html

[if !supportLists]1.    [endif]什么是Glide?

Glide是一个第三方的图片加载框架,这个框架比较先进,考虑的使用场景也很周全,在缓存这一功能上,Glide分为两个模块,一个是内存缓存,一个是硬盘缓存。

[if !supportLists]2.    [endif]Glide的缓存模块。

内存缓存,主要作用是防止应用重复将图片数据读取到内存中。

硬盘缓存,主要作用是防止应用重复从网络或其他地方重复下载和读取数据。

有内存缓存和硬盘缓存相互结合才构成Glide极佳的图片缓存效果。

[if !supportLists]3.    [endif]Glide三级缓存

内存缓存硬盘缓存网络缓存   

从内存缓存开始如果有则使用没有则去硬盘寻找 硬盘没有再去网络进行下载

内存缓存:new 一个Lrucache对象底层是一个map集合储存数据

硬盘缓存: 存到sd卡

网络缓存:加载网络图片下载图片

[if !supportLists]4.    [endif] 

分为三层,内存缓存,弱引用缓存,磁盘缓存

存入的顺序:弱引用,内存,磁盘

取出的顺序:内存,弱应用,磁盘

[if !supportLists]5.    [endif]为什么你要选择Glide图片加载框架?

除了上面说的Glide框架的特点,在使用Glide加载图片的时候,不用担心内存溢出的问题。比如说,我需要加载一张大图,Glide不会直接将图片的完整尺寸全部加载到内存中,而是用多少加载多少,Glide会自动判断ImageView的大小,然后只将ImageView计算出来的大小图片像素加载到内存中,帮助我们节省内存的开支。


Picasso原理

[if !supportLists]1.    [endif]什么是Picasso?

Picasso是android开发用来加载图片的一个三方框架。

[if !supportLists]2.    [endif]Picasso 缓存机制?

Picasso的缓存机制是LruCache和DiskLruCache组合实现缓存。Picasso的图片加载优先级是memory > disk > network, 可以设置setIndicatorsEnabled来判断图片是通过什么渠道加载的。

[if !supportLists]3.    [endif]什么是LruCache?

LruCache的主要核心实现是LinkHashMap,LinkHashMap是一个能按顺序存储的链表,其中有一个叫Lru的算法排序,能将最近添加或使用的文件放在表头,而很少用的文件放在表尾,当缓存的文件达到设置的阈值,则将表尾不常用的缓存文件删除。因此大多数情况下可以不用删除缓存,除非需要跟新某个图片列。如更换头像之类的。LruCache将缓存放于Memory中,因此当该应用进程结束的时候会自动被释放,为了数据的持久化,加快缓存读取因此还有个DiskLruCache。

[if !supportLists]4.  [endif]什么是DiskLruCache?

和LruCache类似,只不过是将缓存文件放到了disk上,当一个图片被缓存下来了之后,缓存目录下会看到3个文件,分别是xx.0,xx.1,journal,对应的目标文件是网络请求头文件,缓存文件,日志。Journal在DiskLruCache中还扮演了比较重要的作用,它保存了所有对缓存操作的记录,包括数据是否成功写入,读取记录及缓存文件的大小。同样当缓存文件超出了范围,DiskCache也会删除比较旧的数据,以及journal中旧的操作记录。


Glide与Picasso对比


[if !supportLists]1.  [endif]Picasso是加载全尺寸的图片到内存,然后让GPU来实时重绘大小,而Glide加载的大小和ImageView的大小是一致的,因此更小。当然,Picasso也可以指定加载的图片大小,但是你需要主动计算ImageView的大小。

[if !supportLists]2.  [endif]磁盘缓存的策略不一样。Picasso缓存的是全尺寸的,而Glide缓存的是跟ImageView尺寸相同的。如不管大小如何Picasso只缓存一个全尺寸,Glide则不同,它会为每种大小的ImageView缓存一次。

[if !supportLists]3.  [endif]Glide可以加载Gif动画,而picasso不能。

[if !supportLists]4.  [endif]Glide可以将任何本地视频解码成一张静态图片。

[if !supportLists]5.  [endif]Glide可以配置图片显示的动画,而picasso只有一种动画,fading in.

[if !supportLists]6.  [endif]Glide和Picasso都是非常优秀的库,Glide加载图像以及磁盘缓存的方式都要优于Picasso,速度更快,并且Glide更有利于减少内存溢出的发生,Gif动画更是亮点。不过Picasso的图片质量更高。使用Glide占用的内存先比picasso要高,可以更加项目的实际情况选择使用哪个框架。

你可能感兴趣的:(Glide、Picasso原理)