一张图搞定Glide核心流程

316 阅读1分钟

记录一份全览Glide核心流程的代码流程图,方便以后查阅

提示:Glide的流程相当复杂,希望读者坚持根据流程全览图,对照代码走一遍代码流程,对主要流程有一个大致概念后,再深入细节。

核心流程全览图

读者可以根据图对照代码阅读源码 Glide主要流程详解.jpg

关键类及关键方法

Glide

with(Context): RequestManager
getRetriever(Context): RequestManagerRetriever
// 关键方法,创建Glide
get(context): Glide
getRequestManagerRetriever(): RequestManagerRetriever

GlideBuilder

build(Context, List<GlideModule>, AppGlideModule): Glide

RequestManagerRetriever

get(Context): RequestManager
get(FragmentActivity): RequestManager

LifecycleRequestManagerRetriever

// 关键方法,创建RequestManager
getOrCreate(Context, Glide, Lifecycle, FragmentManager, boolean): RequestManager
getOnly(Lifecycle): RequestManager

RequestManager

load(String): RequestBuilder<Drawable>
asDrawable(): RequestBuilder<Drawable>
as(Class<ResourceType>): RequestBuilder<ResourceType>
asBitmap(): RequestBuilder<Bitmap>
track(Target<?>, Request): void

RequestBuilder

into(ImageView): ViewTarget<ImageView, TranscodeType>
into(Y, RequestListener<TranscodeType>, BaseRequestOptions<?>, Executor): Y
buildRequest(Target<TranscodeType>, RequestListener<TranscodeType>, BaseRequestOptions<?>, Executor): Request
buildRequestRecursive(Object, Target<TranscodeType>, RequestListener<TranscodeType>, RequestCoordinator, TransitionOptions<?, ? super TranscodeType>, Priority, int, int, BaseRequestOptions<?>, Executor): Request
buildThumbnailRequestRecursive(Object, Target<TranscodeType>, RequestListener<TranscodeType>, RequestCoordinator, TransitionOptions<?, ? super TranscodeType>, Priority, int, int, BaseRequestOptions<?>, Executor): Request
// 关键方法,创建SingleRequest
obtainRequest(Object, Target<TranscodeType>, RequestListener<TranscodeType>, BaseRequestOptions<?>, RequestCoordinator, TransitionOptions<?, ? super TranscodeType>, Priority, int, int, Executor): Request

ImageViewTargetFactory

buildTarget(ImageView, Class<Z>): ViewTarget<ImageView, Z>

RequestTracker

runRequest(Request): void

SingleRequest

begin(): void
onResourceReady(Resource<?>, DataSource, boolean): void
onSizeReady(int, int): void

Engine

load(GlideContext, Object, Key, int, int, Class<?>, Class<R>,...): LoadStatus
loadFromMemory(EngineKey, boolean, long): EngineResource<?>
loadFromActiveResources(Key): EngineResource<?>
loadFromCache(Key): EngineResource<?>
waitForExistingOrStartNewJob(GlideContext, Object, Key, int, int, Class<?>, Class<R>, ...): LoadStatus

EngineJobFactory

build(Key, boolean, boolean, boolean, boolean): EngineJob<R>

EngineJob

init(Key, boolean, boolean, boolean, boolean): EngineJob<R>
// 利用GlideExecutor执行DecodeJob(实现了Runnable接口)
start(DecodeJob<R>): void

DecodeJobFactory

build(GlideContext, Object, EngineKey, Key, int, int, ...): DecodeJob<R>

DecodeJob

init(GlideContext, Object, EngineKey, Key, int, int, ...): DecodeJob<R>
// 重要逻辑,DecodeJob实现了Runnable接口,在其中实现了根据各级缓存获取结果的逻辑
run(): void
runWrapped(): void
getNextStage(Stage): Stage
getNextGenerator(): DataFetcherGenerator

DataFetcherGenerator

startNext(): Boolean