面试前你需要知道的基本知识

写在开端

不管是为了薪资的上涨或者个人的发展,跳槽在IT从业者看来并不稀奇,每年的金三银四,金九银十,总有许多的IT从业者"蠢蠢欲动",既然有了跳槽就免不了要碰上各式面试官,各种或基础或稀奇古怪的题目,对于有一些工作经验的人,越是最基础的问题恰恰越回答不出来,为啥呢?因为有了经验就有了习惯,有了习惯便有了理所当然,有了理所就不会去考虑除了习惯以外的可能性,一句"我平时都是这样用的,至于为啥这样用,鬼知道啊?!!!!!!!!!!!!!!!!"就足以让我们丢掉可能的机会,故写此文章,记录一些面试中或者实际项目中可能会用到但是现实中却不那么引人时时刻刻记录或者注意的知识点,权当作为面试前的温习.(此文笔者会不定时的更新.)

图片加载框架Glide和Picasso的区别

库的大小和方法数

单纯的从库的大小来说,Glide库要比Picasso大很多,这就意味着Glide会包含很多的方法数,但我们都知道安卓有一个65535的方法数限制,所以从这个点来说,Picasso要优于Glide.

生命周期

我们知道Picasso和Glide的用法是极其相似的,都支持渐变动画以及基于中间的裁剪(Center Crop),当然了两者都可以设置加载中中和加载错误的图片占位图,但Glide对比于Picasso的一大好处是我们在调用Glide.with()的时候可以传入Activity或者Fragment的实例进去,这样Glide就会自动将图片加载等操作和组件的生命周期如:onPause,onResume联系起来


内存占用

Picasso默认加载的图片质量是ARGB-8888,而Glide默认加载的图片质量是RGB-565,两种图片虽然在手机上看不出来太多的区别,但是在内存使用上,Picasso要比Glide多消耗一倍的内存.


当然了,如果你对图片的要求比较高的话,我们也可以指定Glide加载质量是ARGB-8888的图片,但是此时Picasso的内存消耗还是远远大于Glide


这是什么原因呢?原因就在于Picasso在加载图片时会按图片原本的大小,将图片完整的加载到内存里,然后让GPU来绘制可能需要的大小(比如原本的图片大小是1080*1920 ,而需要的ImageView是720*1080,那么Picasso会将完整的图片1080*1920加载到内存中,然后再绘制成720*1080大小),但是Glide只会加载实际需要的大小相同的图片到内存中(也就是720*1080),当然了,你可以利用Resize()指定Picasso在加载图片时要加载的图片的大小,但是前提是你要计算ImageView的大小,或者说你的ImageView的宽和高是固定值而不是wrap_content,而且就算是Resize,也是针对full Size的Resize.当然还有一种方法可以让Picasso的内存占用量和Glide一样,那就是在用Picasso加载图片的时候,设置centerCrop(),这样,Picasso和Glide加载图片所占用内存基本一样了.

磁盘缓存

Picasso和Glide都支持从指定的URL地址将图片下载下来并缓存到磁盘上,但两者的缓存策略不一样,

Picasso 将图片下载后会不经压缩直接将图片整个缓存到磁盘中,当需要用到图片时,它会直接返回这张完整大小的图片,并在运行时根据 ImageView 的大小作适配。

Glide 的原理与之不同,它从指定 URL 地址下载图片后会首先根据 ImageView 的大小适配图片,然后将适配后的图片再存储到磁盘中。因此,如果你使用不同大小的 ImageView 加载同一张图片,Glide 将会以不同的分辨率缓存这张图片的两份不同的拷贝。也就是说利用Glide加载图片, 即使这张图片已经在一个 ImageView 中加载过,如果另一个大小不同的 ImageView 也要加载这张图片,那么这张图片仍然需要重新走一遍流程:到指定的 URL 地址下载,然后根据 ImageView 大小适配,最后缓存到磁盘中。这样可能会增加磁盘缓存的大小,但好处是在图片的显示速度上Glide会比Picasso快,(因为Picasso每次都要重新适配为ImageView的大小,而Glide一旦加载过图片,便可以立即显示.可以理解为以空间换时间),

当然,上面我们说的是默认情况,如果在使用 Glide 时不希望每次都去远程服务器下载完整大小的图片,那么在初始化时可以添加如下 diskCacheStrategy 配置,


这样配置后,Glide 下次从指定 URL 下载图片,会同时在磁盘上缓存完整的图片和经过大小适配后的图片,下次另一个大小不同的 ImageView 也要加载这张图片,Glide 会直接从磁盘获取完整大小的图片并进行大小适配,缓存后显示在这个 ImageView 中。

图片加载时间

如果都是从URL处加载图片Picasso要快于Glide,可能的原因是 Picasso 下载完图片后直接将整个图片加载进内存,而 Glide 还需要针对每个 ImageView 的大小来适配压缩下载到的图片,这个过程需要耗费一定的时间。(当然我们可以使用 thumbnail() 来减少压缩的时间)

当然,如果直接从磁盘缓存中加载图片的话,Glide 要比 Picasso 快。这要归功于 Glide 的设计。Picasso 在将图片设置到 ImageView 之前,需要在运行时将图片适配压缩到 ImageView 的大小,这会耗费一定的时间

对于GIF图片的支持

Picasso只能加载静态的图片,但是Glide可以加载动态的GIF图片

未完待续......


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值