本文提供真实的面试问答,希望对你有所帮助
问题1. 用过什么图片加载框架,怎么做技术选型的:
分别有ImageLoader, Picasso, GLide, Fresco,ImageLoader是比较久远的库,Picasso比Glide包体要小,但是加载性能没Glide好(GLide支持三级缓存和生命周期绑定,picasso不支持磁盘缓存,且glide默认采用RGB565,picasso是RGB8888),Fresco加载性能最好,功能最齐全(通过开辟一个共享内存从而做到了不占用堆内存)
总结是应用需要处理较多图片时采用Fresco,一般情况下Glide可以满足需求
问题2. 讲下Glide的缓存原理(这里会结合你在项目中用到的框架,这里以Glide举例)
相较于常见的内存+磁盘缓存,Glide将其缓存分成了4层。
- 活动资源 (Active Resources):
当需要加载某张图片能够从内存缓存中获得的时候,在图片加载时主动将对应图片从内存缓存中移除,加入到活动资源中。
这样也可以避免因为达到内存缓存最大值或者系统内存压力导致的内存缓存清理,从而释放掉活动资源中的图片(recycle)。
活动资源中是一个”引用计数"的图片资源的弱引用集合。
因为同一张图片可能在多个地方被同时使用,每一次使用都会将引用计数+1,而当引用计数为0时候,则表示这个图片没有被使用也就是没有强引用了。这样