glide-源码解析-1
glide-源码解析-1
一、前言
Glide是一个快速高效的Android图片加载库,注重于平滑的滚动。Glide提供了易用的API,高性能、可扩展的图片解码管道(decode pipeline),以及自动的资源池技术。
Glide 支持拉取,解码和展示视频快照,图片,和GIF动画。Glide的Api是如此的灵活,开发者甚至可以插入和替换成自己喜爱的任何网络栈。默认情况下,Glide使用的是一个定制化的基于HttpUrlConnection的栈,但同时也提供了与Google Volley和Square OkHttp快速集成的工具库。
虽然Glide 的主要目标是让任何形式的图片列表的滚动尽可能地变得更快、更平滑,但实际上,Glide几乎能满足你对远程图片的拉取/缩放/显示的一切需求。
官方github链接地址:https://github.com/bumptech/glide
简体中文文档:https://muyangmin.github.io/glide-docs-cn/
本篇基于4.10.0版本做分析
二、使用
Glide.with(fragment).load(url).into(imageView)
Glide.with(this)
.load(url)
.placeholder(xx)
.error(xx)
.override(w,h)
.fitCenter(xx)
.centerCrop(xx)
.skipMemoryCache(true)
.diskCacheStrategy(DiskCacheStrategy.NONE)
.priority(Priority.HIGH)
.into(imageView)
三、主流程
主流程是整个glide的脉络主线,只有牢记glide主流程,才不会陷入glide细节代码中,更好理解glide
四、with
先从glide最简单的使用开始
Glide.with(this).load(url).into(imageView)
可以看到Glide类提供了多个静态with方法,参数类型不同而已,之所以这么做
- 是为了更方便的为调用者使用
- 是将Glide图片加载与当前组件(context, fragment, activity)绑定在一起,一当组件生命周期结束,图片加载也就停止,最大程度减少资源开销
// Glide.java
@NonNull
public static RequestManager with(@NonNull Context context) {
return getRetriever(context).get(context);
}
public static RequestManager wit