Glide源码学习笔记

本文是基于郭霖glide源码解析系列的学习笔记,在此记录一下。

一、fragment巧用:

使用没有界面的fragment来进行生命周期的控制,活用fragment,这个技巧在很多开源框架上都有使用,自己在项目中也有用到,确实不失为一种解决某些问题的好方法;

二、glide缓存机制原理:

内存缓存:

一个是弱引用来缓存正在使用中的图片,一个是LruCache来缓存使用过的图片。

采用计数的方式,当acquired变量大于0的时候,说明图片正在使用中,也就应该放到activeResources弱引用缓存当中。

而经过release()之后,如果acquired变量等于0了,说明图片已经不再被使用了,就会将弱引用从map中移除,如果设置了缓存,

就会再将它put到LruResourceCache当中。

磁盘缓存:

缓存原始图片 or 缓存转换过的图片(默认),硬盘缓存的实现也是使用的LruCache算法,原始图片和转换过的图片只是缓存的key不一样,

原始图片的key使用的是图片url,转换过的图片使用的是一堆参数生成的key。

三、高级技巧:

1.学习了glide缓存机制,知道缓存原理使用的key是图片url或者根据url等一系列参数生成的,如果url后面拼接了类似token的数据,那么图片url就会动态改变了。

因此glide缓存机制就失效的,为此我们通过读取源码发现,可以通过创建一个自己的GlideUrl,重写getCacheKey()方法,在load的时候传入即可。

2.获取图片对象GlideDrawable等,可以重写Target类,提供的有SimpleTarget。

3.预加载,preload()方法,原理是执行一遍什么都不做就可以了。

4.下载图片,downloadOnly(int width, int height)  和 downloadOnly(Y target) 方法,前者需要在子线程执行,因为在执行过程中会阻塞线程,直到返回结果。后者需要重写一个实现Target接口的类。

5.变换,重写一个类继承BitmapTransformation,重写transform方法;参考glide-transformations 开源库

6.自定义模块,替换glide里的策略模式,如缓存策略、网络请求策略

四、listener监听机制:

类似冒泡式传递,onResourceReady()方法和onException()方法都有一个布尔值的返回值,返回false就表示这个事件没有被处理,还会继续向下传递,返回true就表示这个事件已经被处理掉了,从而不会再继续向下传递。举个简单点的例子,如果我们在RequestListener的onResourceReady()方法中返回了true,那么就不会再回调Target的onResourceReady()方法了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 学习来源:郭霖大师博客地址 1、图片加载框架挺多,如Volley、Glide、Picasso、Fresco、本次是...
    子谦宝宝阅读 5,718评论 0 6
  • Glide笔记 一、简介 在泰国举行的谷歌开发者论坛上,谷歌为我们介绍了一个名叫Glide的图片加载库,作者是bu...
    AndroidMaster阅读 9,425评论 0 27
  • 一、简介 在泰国举行的谷歌开发者论坛上,谷歌为我们介绍了一个名叫Glide的图片加载库,作者是bumptech。这...
    天天大保建阅读 12,231评论 2 28
  • 概述 刚才有说到,有些朋友觉得Glide 4相对于Glide 3改动非常大,其实不然。之所以大家会有这种错觉,是因...
    陈晓松快点跑阅读 6,682评论 0 14
  • 女人自结婚、生子后,想在完成工作、生活的繁重任务之余,再坚持一点自己的梦想,其实是一件挺不容易的事。家人的支持很重...
    盈盈清泉阅读 2,839评论 2 6

友情链接更多精彩内容