带你深入理解Glide框架并手写Glide框架

本文深入探讨Glide在Android中的应用,包括Glide的特性、使用方法以及如何构建自己的Glide框架。文章通过分析Glide的源码,揭示其内存管理和图片加载的高效策略,并通过类比银行业务流程解释Glide架构。同时,介绍了如何从零开始实现网络图片加载,涉及请求队列、多线程处理和缓存机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值