前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Glide三问—虾皮真题

Glide三问—虾皮真题

作者头像
码上积木
发布2020-09-27 14:27:21
7030
发布2020-09-27 14:27:21
举报
文章被收录于专栏:码上积木码上积木

说到图片加载框架,第一个想到的自然就是Glide,但是你真的了解它吗?如果面试问到相关问题你能顺利答出来吗?

  • 还清楚其他的图片加载框架吗?各自有什么优缺点?
  • 图片三级缓存可以说下吗?
  • 一个图片加载框架会涉及到哪些重要的知识?

还清楚其他的图片加载框架吗?各自有什么优缺点?

Glide:

  • 多种图片格式的缓存,适用于更多的内容表现形式(如Gif、WebP、缩略图、Video)
  • 生命周期集成(根据Activity或者Fragment的生命周期管理图片加载请求)
  • 高效处理Bitmap(bitmap的复用和主动回收,减少系统回收压力)
  • 高效的缓存策略,灵活(Picasso只会缓存原始尺寸的图片,Glide缓存的是多种规格),加载速度快且内存开销小(默认Bitmap格式的不同,使得内存开销是Picasso的一半)

Fresco:

  • 最大的优势在于5.0以下(最低2.3)的bitmap加载。在5.0以下系统,Fresco将图片放到一个特别的内存区域(Ashmem区)
  • 大大减少OOM(在更底层的Native层对OOM进行处理,图片将不再占用App的内存)
  • 适用于需要高性能加载大量图片的场景

图片三级缓存可以说下吗?

三级缓存:内存缓存,硬盘缓存,网络

  • 内存缓存一般是使用LruCache,采用最近最少使用算法,设定一个缓存大小,当缓存到达这个大小之后,会将最老的数据移除,保证内存的充足,从而避免oom。
  • 硬盘缓存,一般用DiskLruCache,思路差不多,也是没次往硬盘写文件,大小超过阀值,就将旧文件删除。
  • 网络,即从网络获取图片数据,并加载

首次加载数据,通过网络获取图片对象,保存到内存和硬盘中,下次读取数据,会先从内存获取,没有的话就从本地硬盘加载,都没有的话就从网络获取资源。

一个图片加载框架会涉及到哪些重要的知识?

  • 线程池 包括网络加载的线程池,加载内存和硬盘缓存的线程池,还有动画线程池,其中对于线程切换还是用的Handler
代码语言:javascript
复制
    class EngineJob<R> implements DecodeJob.Callback<R>,Poolable {
   private static final EngineResourceFactory DEFAULT_FACTORY = new EngineResourceFactory();
   //创建Handler
   private static final Handler MAIN_THREAD_HANDLER =
       new Handler(Looper.getMainLooper(), new MainThreadCallback());


  • 缓存 就是刚才上面说到的三级缓存,用于缓存图片
  • 防止oom 1)缓存处理,比如LruCache中缓存大小的设置 2)软引用,缓存中尽量存储软引用,当内存不足时会自动被GC 3)bitmap像素数据存储,ndroid3.0到8.0之间Bitmap像素数据存在Java堆,而8.0之后像素数据存到native堆
  • onLowMemory 当内存不足时,会回调onLowMemory方法,可以在里面进行一些内存的释放
  • 内存泄漏 ImageView内存泄漏,在界面被销毁的时候要记得取消图片加载任务,否则可能会导致内存泄漏
  • 图片错乱 因为recycleview的复用机制,可能会导致图片错乱,这时候就要根据图片的tag来判断图片加载地址是否正确。

参考链接

https://juejin.im/post/6844903986412126216

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-09-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 码上积木 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 还清楚其他的图片加载框架吗?各自有什么优缺点?
  • 图片三级缓存可以说下吗?
  • 一个图片加载框架会涉及到哪些重要的知识?
  • 参考链接
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档