面试官:简历上最好不要写Glide,不是问源码那么简单

本文讨论了为何在面试中不建议仅表明熟悉Glide,因为面试官可能会深入询问Glide的设计、与其他图片框架的对比以及如何构建图片加载框架。介绍了Glide的简单使用方法、选择Glide的原因,如生命周期集成和高效缓存策略,并与Fresco进行了对比。此外,文章探讨了如果要构建自己的图片加载框架需要考虑的关键问题,包括异步加载、线程切换、缓存策略和防止OOM。最后,提到了防止Android OOM的多种方法,如使用软引用。
摘要由CSDN通过智能技术生成

说到图片加载框架,大家最熟悉的莫过于Glide了,但我却不推荐简历上写熟悉Glide,除非你熟读它的源码,或者参与Glide的开发和维护。
在一般面试中,遇到图片加载问题的频率一般不会太低,只是问法会有一些差异,例如:

简历上写Glide,那么会问一下Glide的设计,以及跟其它同类框架的对比 ;
假如让你写一个图片加载框架,说说思路;
给一个图片加载的场景,比如网络加载一张或多张大图,你会怎么做;

带着问题进入正文~
一、谈谈Glide
1.1 Glide 使用有多简单?
Glide由于其口碑好,很多开发者直接在项目中使用,使用方法相当简单
github.com/bumptech/gl…
1、添加依赖:
implementation ‘com.github.bumptech.glide:glide:4.10.0’
annotationProcessor ‘com.github.bumptech.glide:compiler:4.10.0’
复制代码
2、添加网络权限

复制代码
3、一句代码加载图片到ImageView
Glide.with(this).load(imgUrl).into(mIv1);
复制代码
进阶一点的用法,参数设置
RequestOptions options = new RequestOptions()
.placeholder(R.drawable.ic_launcher_background)
.error(R.mipmap.ic_launcher)
.diskCacheStrategy(DiskCacheStrategy.NONE)
.override(200, 100);

Glide.with(this)
.load(imgUrl)
.apply(options)
.into(mIv2);
复制代码
使用Glide加载图片如此简单,这让很多开发者省下自己处理图片的时间,图片加载工作全部交给Glide来就完事,同时,很容易就把图片处理的相关知识点忘掉。
1.2 为什么用Glide?
从前段时间面试的情况,我发现了这个现象:简历上写熟悉Glide的,基本都是熟悉使用方法,很多3年-6年工作经验,除了说Glide使用方便,不清楚Glide跟其他图片框架如Fresco的对比有哪些优缺点。
首先,当下流行的图片加载框架有那么几个,可以拿 Glide 跟Fresco对比,例如这些:
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的内存)
适用于需要高性能加载大量图片的场景

对于一般App来说,Glide完全够用,而对于图片需求比较大的App,为了防止加载大量图片导致OOM,Fresco 会更合适一些。并不是说用Glide会导致OOM,Glide默认用的内存缓存是LruCache,内存不会一直往上涨。
二、假如让你自己写个图片加载框架,你会考虑哪些问题?
首先,梳理一下必要的图片加载框架的需求:

异步加载:线程池
切换线程:Handler,没有争议吧
缓存:LruCache、DiskLruCache
防止OOM:软引用、LruCache、图片压缩、Bitmap像素存储位置
内存泄露:注意ImageView的正确引用,生命周期管理
列表滑动加载的问题:加载错乱、队满任务过多问题

当然,还有一些不是必要的需求,例如加载动画等。<

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值