Glide
baijiahao.baidu.com/s?id=170322…
Glide图片加载总体流程介绍
Glide做了哪些内存优化?
- 尺寸优化(降采样)
- 首先计算出图片与View的宽高比
- 根据缩放策略是省内存还是高品质,决定取宽高比的最大值还是最小值
- 当Build.VERSION.SDK_INT<=23时,一些格式的图片不能缩放
- highestOneBit的功能是把我们计算的比例四舍五入到最接近2的幂
- 如果缩放策略为省内存,并且我们计算的SampleSize<exactScaleFactor,将inSampleSize2
- 图片格式优化 Glide4.0之后,默认格式已经变成了ARGB_8888,并没有优化,可以自己设置
- 内存复用
Glide缓存特点
Glide如何管理生命周期?
新建了一个无UI的Fragment,这个Fragment持有一个Lifecycle,通过Lifecycle在Fragment关键生命周期通知RequestManager进行相关从操作。在生命周期onStart时继续加载,onStop时暂停加载,onDestory时停止加载任务和清除操作。
Glide怎么做大图加载
BitmapRegionDecoder主要用于显示图片的某一块矩形区域,如果你需要显示某个图片的指定区域,那么这个类非常合适。对于该类的用法,非常简单,既然是显示图片的某一块区域,那么至少只需要一个方法去设置图片;一个方法传入显示的区域即可
Glide如何加载GIF
- 首先需要区分加载的图片类型,即网络请求拿到输入流后,获取输入流的前三个字节,若为 GIF 文件头,则返回图片类型为 GIF。
- 确认为 GIF 动图后,会构建一个 GIF 的解码器(StandardGifDecoder),它可以从 GIF 动图中读取每一帧的数据并转换成 Bitmap,然后使用 Canvas 将 Bitmap 绘制到 ImageView 上,下一帧则利用 Handler 发送一个延迟消息实现连续播放,所有 Bitmap 绘制完成后又会重新循环,所以就实现了加载 GIF 动图的效果。