Hi,大家好!我是冯朝野,老鹰课堂的创始人。后续我会将我的技术转化成课程传授给大家,现在还在努力策划中。希望到时候大家可以过来捧捧场。如果你看过我这篇文章过后有收获的,也可以成为我的粉丝,后续还有很多干货等着给大家呢?谢谢你们啦!那么接下来这一篇是针对你们面试中会遇到的问题!让你们完美对弈面试官所有有关图片加载的面试题,让你们玩转图片加载。
首先先来看看面试官如何提出问题的:
面试官:你们在项目中怎么加载图片的啊
我:我们的项目是用Glide、Picasso、ImageLoader做图片加载的
面试官:你知道他们之间的区别吗?你用的Glide有什么优势或者你为是什么要选用Glide
我:区别?哦哦--Glide比其他的图片加载框架更优秀
面试官:具体体现在哪里呢?或者内存管理上有什么区别
我:额额额--这个我不太清楚
面试官:那你看过Glide的源码吗?
我:没有
面对以上的面试题实际上是每个android工程师必面的面试题,因为图片加载是android开发中必须要处理的,无论大小,所以图片加载是一个非常重要的内容。那么你要去面试之前必须对Glide进行深入了解,理解透彻,让面试官感觉你是有料的,让他认为你是高级开发工程师。所以接下来我来带你们去深入理解Glide.
如果你读懂了Glide代码后,在读其他框架源码是非常有帮助的。因为他底层的思想是非常有用的。后续我继续讲解在其他框架中的使用让你们玩转所有框架,自己也能够写框架。好了,那就让我们进入重点把。
学习一门课程,一个技术,都必须遵循what->how->why,这三个步骤去学习,如果你根据我这三个步骤去理解,那么你的收获一定是很丰富的。
1.什么是Glide
Glide是一个快速高效的Android图片加载库,具备性能高,流式API的语法特点.作者bumptech
优势:
1.可配置度高,自适应度高;
2.支持多钟数据源,本地,网络,assets gif在Glide是支持的;
3.高效缓存,支持memory和disk图片缓存,默认使用二级缓存
4.高效处理Bitmap,使用Bitmap pool复用Bitmap
5.图片加载过程可以监听
6.生命周期集成至Glide
2.如何使用Glide
1).引入Glide到gradle中加载
implementation 'com.github.bumptech.glide:glide:3.7.0'
2).查阅Glide底层框架架构,了解其特性,特点等。
RequestOptions options = new RequestOptions();
options.centerCrop();
options.dontAnimate();
options.bitmapTransform(new RoundedCornersTransformation(imgView.getContext(),
10, 0));
options.placeholder(placeholder);
options.diskCacheStrategy(DiskCacheStrategy.ALL);
options.error(error);
Glide.with(imgView.getContext()).load(url).apply(options).into(imgView);
Glide现在升级了很多内容,刚开始是架构师由请求、管理者、分发三个对象完成。现在使用的是Builder模式来构造对象,再由Node树形结构进行访问请求bitmap对象。
首先需要RequestOptions收集设置参数,然后通过apply设置到RequestBuilder对象中,从RequestBuilder来看他就是一个Builder对象,使用Builder模式构建参数数据。然后使用into将请求加入到队列中。当然,要了解这个模式之前,我们先了解Glide刚开始架构的模型是如何的,因为这种模式是通过第一种慢慢演变过来的。
给你们画一张图,让你们清晰明了解析Glide底层架构。
我们将Glide架构按照银行办理业务例子来进行解析,让你们更清晰明了,这里面有三个角色,业务人员、取号机、银行人员
取号机根据业务人员分配号码,银行人员处理业务人员的请求。根据手上是否有事呼叫业务人员。那么我们把业务人员称为BitmapRequest,取号机称为RequestManager,银行人员称为BitmapDispatcher。
3.自己搭建Glide框架读取网络图片
1).Glide对象通过with来构建BitmapRequest