首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

深入解析Glide源码

Glide 是 Google的开源项目, Glide具有获取、解码和展示视频剧照、图片、动画等功能,它还有灵活的API,这些API使开发者能够将Glide应用在几乎任何网络协议栈里。...创建Glide的主要目的有两个,一个是实现平滑的图片列表滚动效果,另一个是支持远程图片的获取、大小调整和展示。本篇博客,我们一起深入分析Glide的源码。...中的RequestManager,判断其是否存在,不在则进行创建,然后和SupportRequestManagerFragment 进行绑定,这里需要强调的是,构建RequestManager时,将SupportRequestManagerFragment...,在于,SupportRequestManagerFragment 的生命周期的方法,都会同步通知lifecycle的所有Listener,所以SupportRequestManagerFragment...的生命周期都可同步通知RequestManager,这就是glide的巧妙之处。

80730
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    懵了,面试官突然问我:Glide是干啥的?我对着那Glide新版本就是一顿暴讲

    现在对with()方法的流程以及生命周期的控制管理是不是稍稍有那么一些印象了。无法复述没有关系。先能顺下来,当你第二遍看到时候就会事半功倍了。 写了这么一堆,我们回顾下这个with()干了啥? 1....SupportRequestManagerFragment对象中有个属性为ActivityFragmentLifecycle对象,并且在SupportRequestManagerFragment的生命周期方法中均调用了...glide.removeFromManagers(target) && request != null) { //移除请求调用清理。...本质原理就是 SupportRequestManagerFragment是通过传入的Context创建的。可以感知onStart(), onStop(), onDestroy() 等方法。...纵然前路迷茫,纵然天隔一方,纵然我手中的刀刃已然破碎,也无法阻挡我寻找你的道路。吾之初心,永世不忘,这个故事还没有完结。

    3K21

    Glide源码分析(一)

    Glide作为一个图片加载框架深受开发者喜欢,包体积小,加载速度快,以及加载圆角等。作为一名开发者我们有必要去了解Glide图片加载机制,它是如何把图片加载出来的?以及在图片加载过程中它都做了什么?...SupportRequestManagerFragment 中 requestManager = factory.build( glide,...fm.beginTransaction().add(current, FRAGMENT_TAG).commitAllowingStateLoss(); //2.5添加成功,移除缓存...获取到glide对象很好理解,为何要获取当前界面的生命周期呢?我们都知道图片加载的速度慢于界面加载的速度,通过界面的生命周期,我们就能控制glide是否要继续加载未加载完的图片等,稍后还要继续分析。...从 Glide 注册的 register 中获取请求 model 加载器 List<ModelLoader<Object, ?

    1.5K30

    去大厂面试,结果没想到一个Handler还有中高级几种问法,我慌了...

    但是Entry中的Value却是被Entry强引用的,所以即便Value的生命周期结束了,Value也是无法被回收的,从而导致内存泄漏。...postSyncBarrier()发送同步屏障,removeSyncBarrier()移除同步屏障 同步屏障的作用可以理解成拦截同步消息的执行,主线程的 Looper 会一直循环调用 MessageQueue...就是执行 view 的 layout、measure、draw),这个过程中如果有其他同步消息,也无法得到处理,都要等到 doTraversal 之后。...打造一个不崩溃的程序,可以参考这篇文章 Glide中的应用 Glide 相信大应该非常熟悉了,我们都知道Glide生命周期的控制(如果不了解,可以看下Glide相关文章的分析,跟LiveData 是同一个原理...再接着有了第6步发送移除Map缓存的消息,因为Handler处理消息是有序的。

    70900

    安卓-无敌解决ListView添加标题头无法正常显示的问题(歪门邪道)

    原因: 在做安卓实验时,用到了ListView来做表格显示数据。由于表头是使用xml布局文件动态实现的。造成了添加好组件后,无法正常显示的情况。浪费了我2小时的时间,终于利用歪门邪道解决了。...重点 首先要知道的是使用listView.addHeaderView(view)添加表头时,如果listView中没有数据的话,是不能显示数据的。...咋整呢 终于 被逼的不行了,就试着继续往下做。我先利用for循环,随便生成了几条数据,发现可以正常显示了,哈哈哈哈。...item_hight"}, new int[]{R.id.item_id, R.id.item_username, R.id.item_age,R.id.item_hight}); //实现列表的显示...这种办法应该不是最好的解决办法,如果哪位大神看到了此篇文章,如果您有更好的解决办法,请给小弟留言。

    1.4K31

    安卓系统签名方法2则

    最近一个安卓的项目,本来是使用安卓板4.2的;但由于生产需求将原来的单板集成到整体(显示触屏+安卓)。由于其提供的样板是6.0。整个程序的主功能运行还可以,就是无法写日志和播放本地视频。...于是研究一下,发现原来是他们提供的安卓未root导致的。于是跟供应商联系给root文件,谁知这丫的不给,就给了个安卓的系统签名。。好吧,给系统签名就重新编译吧。...1、加入签名最简单的方法就是二签,就是用原来的签然后换他们给的系统签名。...1.1.1' implementation 'com.google.code.gson:gson:2.8.2' implementation 'com.github.bumptech.glide...:glide:4.6.1' annotationProcessor 'com.github.bumptech.glide:compiler:4.6.1' implementation files

    1.8K40

    Handler的初级、中级、高级问法,你都掌握了吗?

    如何处理Handler使用不当造成的内存泄漏? Handler的消息优先级,有什么应用场景? 主线程的Looper何时退出?能否手动退出? 如何判断当前线程是安卓主线程?...(安卓开发艺术探索) 子线程如何通知主线程更新UI(都是通过Handle发送消息到主线程操作UI的) 主线程中定义 Handler,子线程通过 mHandler 发送消息,主线程 Handler 的 handleMessage...但是Entry中的Value却是被Entry强引用的,所以即便Value的生命周期结束了,Value也是无法被回收的,从而导致内存泄漏。...中的应用 Glide 相信大应该非常熟悉了,我们都知道Glide生命周期的控制(如果不了解,可以看下Glide相关文章的分析,跟LiveData 是同一个原理)是通过添加一个空的Fragment到Activity...再接着有了第6步发送移除Map缓存的消息,因为Handler处理消息是有序的。

    1.2K40

    H5+APP在设备升级android10后不能启动了

    h5+.jpg 基于MUI 、H5+开发的APP在安卓设备升级到Android10后无法启动,点击图片没反应!! 经查得知Android10后,plus获取设备信息等一些操作不在支持了。...同样的代码在原来版本的HX中可以直接真机调试运行在Android10设备上,可正常启动未发现其他异常。由于我是离线打包的,所以断定打包过程一些api无法用了。...但是官方的基座可以在老版本HX上直接运行在Android10上,推测基座版本和HX关系不大,应该是最新的。 所以我们的APP要重新打包发布了。...库 工程目录 app->build添加依赖 implementation 'com.github.bumptech.glide:glide:4.9.0' implementation 'com.alibaba...2、XXXX.aar 文件无法找到、无法链接之类的 删除不需要的.aar文件 其他错误层出不穷,出现有一个修改一个。。。 最后不在报错!最后打包导出apk!

    92330

    Fragment全解析系列(一):那些年踩过的坑

    在这之前为了方便后面文章的介绍,先规定一个“术语”,安卓app有一种特殊情况,就是 app运行在后台的时候,系统资源紧张的时候导致把app的资源全部回收(杀死app的进程),这时把app再从后台返回到前台时...如果你在add的同时将Fragment加入回退栈:addToBackStack(name)的情况下,它并不能真正将Fragment从栈内移除,如果你在2秒后(确保Fragment事务已经完成)打印getSupportFragmentManager...如果你使用25.4.0及以上版本,下面的方法不要再使用,google移除了mAvailIndices属性 在Fragment库中如下4个方法是可能产生BUG的: 1、popBackStack...使用方法就是通过popBackStackImmediate(tag/id)多个Fragment后,调用 ?...2、popBackStack的坑 popBackStack和popBackStackImmediate的区别在于前者是加入到主线队列的末尾,等其它任务完成后才开始出栈,后者是队列内的任务立即执行

    3.2K20

    Android 性能优化

    至于安卓系统为什么设置每个16ms来触发渲染这就跟人眼的生理结构有关,人的眼睛可以感知每秒60帧的动画,如果低于60帧就不会认为它是连续性的。 ?...具体在实际的安卓开发中,我们要尽量避免过度绘制、XML层级过深、测量耗时等 ?...过度绘制 我们知道安卓是根据XML从上而下遍历渲染的,图中的蓝色区域是一次绘制,绿色区域的控件也有颜色,这样就造成了二次绘制,以此类推,这就是过度绘制。...,SparseLongArray,LongSparseArray), SparseArray 在安卓平台上效率高于 HashMap,这些特定的数据结构从读取速度、内存消耗都有做特殊的优化,可以在合适的地方采用来提高效率...,一些大数据量的计算建议放在子线程执行,最好用线程池来操作,直接使用线程不可控,可使用RxJava 的 IO 线程来处理大计算量,很多框架有做相关的优化,还有一些"计算优化"是属于特定的安卓下的计算优化

    83510

    2019年大厂Android面试题

    equals和hashcode的区别 方法的重写和重载 重载时传入泛型不同的list,会有问题吗 泛型通配符的使用,存入本身类对象会出问题吗 同一对象的两个锁,分别执行wait和notify,代码执行顺序...和ART的区别 B站弹幕的源码 Mediaplayer如何实现音画同步 a奇异 Handler的postDealy中的runnable何时添加 onSaveInstanceState调用的时机,其中系统保存了什么...glide和imageloader区别 glide如何做到生命周期绑定 安卓中常见的内存泄露 安卓中常见的oom、如何避免 merge、include和viewstub的使用 如何实现即使通讯 t探...okhttp拦截器的作用和好处 自定义拦截器添加的位置 okhttp连接复用原理 rxjava各操作符、map和flatmap却别 rxjava如何线程调度、原理 glide源码 手写实现图片加载 ijkPlayer...m蚁金服 父类static方法能否被子类继承、重写 普通内部类和静态内部类的区别 非安卓方法实现线程之间通信 发生异常时,synchroized和lock的区别 jvm内存模型 AsyncTask一个对象可以重复执行吗

    3K20

    学习笔记 | Android Studio安卓开发入门经验总结 干货

    故在此总结整理安卓开发中比较常见的一些问题,技巧和指南。 1.开发环境 Android Studio是谷歌基于IntelliJ IDEA社区版开发的,面向安卓开发的免费集成开发环境。...其方便快捷的开发调试和可视化UI编辑可以令安卓开发事半功倍。...接着,Minimum SDK指的是本项目所支持的最小安卓SDK,点击“Help me choose”会出现如下界面帮助选择合适的安卓最小SDK版本: 图1 安卓API版本选择帮助界面 其中CUMULATIVE...DISTRIBUTION表示如果支持该安卓版本以上设备,则预估能支持安卓设备占所有安卓设备的百分比。...3.2 安卓项目文件及目录结构简介 安卓应用配置文件AndroidManifest.xml: 用于配置包名、应用权限、应用图标及名称、主题等基本信息,此外包括了应用的Activity相关配置,没有在此进行注册的

    2.5K60

    Android-图片加载策略- Glide 入门和使用

    在这里你将获得 android Glide 教程的入门介绍 Glide是一个安卓库,允许我们通过单行代码从互联网或网址获取图像。在我之前的一篇教程中,我向您展示了毕加索图像库的用法。...Glide是毕加索图书馆的一个很好的选择。大多数功能在两者中都很常见。 Glide是谷歌推荐的流行的Android图像库,甚至Google也在各种应用程序中使用它。以下是此库的一些功能。...---- Glide图像库的特点 支持获取图像,GIF和视频静止图像。 可以添加占位符和错误图像。 支持磁盘缓存。 图像调整大小和裁剪。...Glide胜过 Picasso 的最大优势之一是Glide支持GIF。 ---- Android Glide教程 让我们快速跳转到实际的教程部分。 如何使用Glide获取图像?...- Android Glide示例 让我们做一个简单的Android应用程序,显示Glide图像库的用法。

    1.4K10

    面试官:关于Glide常问的几个问题你掌握多少?答对了直接绿卡!

    LruCache一般我们会设置为系统最大存储空间的八分之一,而它的机制就是我们常说的最近最少使用原则,如果Lru中的图片大小超过了默认大小,则会把最久使用的图片移除。...当图片被Lru移除时,我们需要手动将图片添加到软引用(SoftRefrence)中。需要维护一个软应用的集合在我们的项目中。 简单概括一下常用的三级缓存的流程: 先去Lru中找,有则直接取。...下面介绍一下Glide的缓存结构: Glide缓存严格意义上说只有内存缓存和磁盘缓存,内存缓存中又分为Lru和弱引用缓存。 所以Glide的三级缓存可以分为:Lru缓存,弱引用缓存,磁盘缓存。...下面我们看一下Glide的读取顺序,这里有一点不同,我用的是Glide4.8版本,跟之前版本的写入顺序稍有不同。...真正最能锻炼能力的便是直接去阅读源码,不仅限于阅读各大系统源码,还包括各种优秀的开源库。 刷大厂面试题备战,增加大厂通过率 历时半年,整理了这份市面上最全面的安卓面试题解析大全。

    51000
    领券