问题:

1.使用的什么网络请求

使用的HttpURLConnection

com.bumptech.glide.load.model.stream.HttpGlideUrlLoader
com.bumptech.glide.load.data.HttpUrlFetcher

2.缓存

使用了内存缓存LruCache
和 DiskLruCache
DiskCache 分为两种类型一种是元数据DATA_DISK_CACHE,一种是RESOURCE_DISK_CACHE(处理过的数据)

3.内存泄漏?

4.怎么区分加载网络和assert 下面的资源?
5.架构上面有什么值得学习的地方?

6.线程切换问题怎么处理?

解析完之后,使用handler post 一个runnable

  private static final Executor MAIN_THREAD_EXECUTOR =new Executor() {private final Handler handler = new Handler(Looper.getMainLooper());@Overridepublic void execute(@NonNull Runnable command) {handler.post(command);}};

就算在子线程中,也可以使用MainLooper 构建一个handler 发送runnable.

7.怎么和声明周期绑定的?

8.多个任务怎么处理?
为什么要自己写一个ExecutorService?
9.build模式的好处是什么?
10.每个fragment 都有自己的

  @NonNullpublic RequestManager get(@NonNull Fragment fragment) {Preconditions.checkNotNull(fragment.getContext(),"You cannot start a load on a fragment before it is attached or after it is destroyed");if (Util.isOnBackgroundThread()) {return get(fragment.getContext().getApplicationContext());} else {FragmentManager fm = fragment.getChildFragmentManager();return supportFragmentGet(fragment.getContext(), fm, fragment, fragment.isVisible());}}

RequestManager 吗?
对,每个都有,用于管理当前页面的所有的Request

11.各个模块都是怎么设计的,怎么粘合在一起的?
比如网络,缓存,图片解析。

12.Priority 优先级怎么实现的 ?

13.占位图,失败图,怎么设计的?
怎么设计的? 实现简单啊。很烂的代码都可以实现,但是,设计不一样。

14.请求的一个状态
请求的状态怎么管理,怎么样验证?
怎么保证多线程没有问题。
根据Map去管理所有的任务

15.request 只负责调用加载图片,然后传给target,
具体target 怎么使用图片资源,那就是target 的责任。
还有就是资源路径的管理。
具体加载由engine 加载,这样的好处是什么?
对外值开放功能,不暴露细节?

16.为什么target 要有request 的引用?
要保证当前的target 没有其他的请求。

17.引擎是个什么类,责任是啥?

18.ModelLoader 应该会有很多,比如从文件,从网络。
modelloader 负责去生成LoadData
LoadData里面包含DataFetcher

19.每个人真的分的很清楚,策略就是计算bitmap 占用大小的。虽然可以在lruCache 里面直接写。

20.engine 和 engineJob 的作用是什么?
engine:
Responsible for starting loads and managing active and cached resources.
引擎负责管理首先从缓存里面加载需要的资源,如果没有,则开启新的任务

21.预加载图片
22. 应该会有很多的request,那么glide 开了几个线程去处理呢? 很多请求用的什么队列?
23.为什么增加了

   SupportRequestManagerFragment current =(SupportRequestManagerFragment) fm.findFragmentByTag(FRAGMENT_TAG);if (current == null) {current = pendingSupportRequestManagerFragments.get(fm);if (current == null) {current = new SupportRequestManagerFragment();current.setParentFragmentHint(parentHint);if (isParentVisible) {current.getGlideLifecycle().onStart();}pendingSupportRequestManagerFragments.put(fm, current);fm.beginTransaction().add(current, FRAGMENT_TAG).commitAllowingStateLoss();

fm.beginTransaction().add(current, FRAGMENT_TAG).commitAllowingStateLoss(); 原理是什么?为什么就能监听fragment 的生命周期了?

22.GlideExecutor 的作用

只是包装了一下ThreadPoolExecutor,里面的线程名名字等做了下封装。
你会发现,有很多的Wrapper,每个Wrapper 都会有自己的作用。

每一个都是viewTarget, 每一个都有一个request.

24.glide 架构清晰:
RequestManager
RequestBuilder

RequestTracker
target
request
engy
job
engyjob

怎么加载Assets文件

load(“file:///android_asset/banner7_bg.png”)
AssetUriLoader StreamAssetPathFetcher 负责

https://zhuanlan.zhihu.com/p/60425157

看了源码,你才知道,具体干活的代码可能就那一段,就像现实生活中真正干活的就那一个人,但是其他的管理者还是需要的。

Glide 源码分析与面试提问相关推荐

  1. Android 图片框架原理——Glide源码分析

    目录 前言 一.With() 二.load() 三.into() 1. buildImageViewTarget() 2.关注1 :buildRequest 构建 3.关注2:runRequest 执 ...

  2. 图片加载—Glide为什么这么强?Glide源码分析(下)

    写在前面 Github–Glide 镇楼 欢迎光临下篇 ~ 目录 (上) 1.代码实例 2.GlideApp 3.with 4.监听生命周期 5.load 6.into (下) 1.资源加载和缓存机制 ...

  3. Glide源码分析3 -- 绑定Activity生命周期

    1. 概述和核心类 Glide中一个重要特性是Request可以随Activity或Fragment的onStart而resume,onStop而pause,onDestroy而clear,从而节约流 ...

  4. Glide源码阅读理解一小时

    前言 这篇图.文.表.代码一起组成的 Glide 源码分析的文章是在上一篇文章 Android-Universal-Image-Loader源码分析 中之后的又一篇图片加载框架源码解析,它也具备了 I ...

  5. glide源码中包含了那种设计模式_月薪20+的程序员面试都问这些高端技术题(含答案+面试指导)...

    不知道大家有没有发现,最近情况在慢慢好转,现在我们小区已经解控了,再也不要绕远路出门了,可喜可贺. 当然,我们的金三银四马上也要发挥它该有的作用了,尚未找到工作的朋友们,准备好了吗? 今天给大家带来的 ...

  6. 阿里面试这样问:Nacos配置中心交互模型是 push 还是 pull ?(原理+源码分析)...

    本文来源:公众号「 程序员内点事」 对于Nacos大家应该都不太陌生,出身阿里名声在外,能做动态服务发现.配置管理,非常好用的一个工具.然而这样的技术用的人越多面试被问的概率也就越大,如果只停留在使用 ...

  7. spring源码分析第六天------spring经典面试问题

    spring源码分析第六天------spring经典面试问题 1.Spring5 新特性及应用举例 2.Spring 经典的面试问题 a.什么是 Spring 框架?Spring 框架有哪些主要模块 ...

  8. java多线程系列:ThreadPoolExecutor源码分析,java基础面试笔试题

    我总结出了很多互联网公司的面试题及答案,并整理成了文档,以及各种学习的进阶学习资料,免费分享给大家. 扫描二维码或搜索下图红色VX号,加VX好友,拉你进[程序员面试学习交流群]免费领取.也欢迎各位一起 ...

  9. 面试必会之ArrayList源码分析手写ArrayList

    作者:Java知音-微笑面对生活 简介 ArrayList是我们开发中非常常用的数据存储容器之一,其底层是数组实现的,我们可以在集合中存储任意类型的数据,ArrayList是线程不安全的,非常适合用于 ...

最新文章

  1. ocrosoft Contest1316 - 信奥编程之路~~~~~第三关 问题 E: IQ(iq)
  2. Java开发工具和环境,你了解多少?(二)
  3. 产品经理这个角色真的泡沫越来越大吗?
  4. html走马观花效果,走马观花台湾行 用EF-S 10-18来记录风景
  5. ptmalloc,tcmalloc和jemalloc内存分配策略研究
  6. 16进制颜色与UIColor互转
  7. android字体单位sp,Android中的常用尺寸单位(dp、sp)快速入门教程
  8. Urlrewrite地址重写
  9. WordPress社交网络菜单图标更改——SVG图标
  10. 关于能力素质模型建模
  11. 测试行业4年经验,面试进了阿里,二个月后我果断选择裸辞...
  12. P2504 [HAOI2006]聪明的猴子-题目详解
  13. 操作系统MSXML组件版本过低,导致启动失败的原因
  14. 手机信号不好?真不是套餐原因!4招教你搞定!
  15. “如果没有从事研发,学习自动化的我可能在装水表”
  16. 隐马尔科夫模型(HMM)模型训练:Baum-Welch算法
  17. 【C语言】BC102 带空格直角三角形图案(DAY 9)
  18. 解决 输入kubectl get pods -o wide后没有显示ip
  19. 安静且高效一点就好3
  20. LeetCode T509 T16 T33 T34 T36 T41 T43 T48 T49

热门文章

  1. linux下 get,Unix/Linux下 getrusage 的用法
  2. python行为识别_牛!Python 也能实现图像姿态识别溺水行为了
  3. 计算机编码技术ppt,计算机编码技术.ppt
  4. python生成wheel包注意事项
  5. 893B. Beautiful Divisors#美丽的因子(打表法)
  6. 半导体并购停不下来 ADI拟148亿美元收购Linear
  7. HDFS块文件和存放目录的关系
  8. arm linux中添加开机启动
  9. 时域和频域变换之---傅里叶级数的数学推导
  10. 首款移动社交购物平台“商宝”上线发布