记录一份全览Glide核心流程的代码流程图,方便以后查阅
提示:Glide的流程相当复杂,希望读者坚持根据流程全览图,对照代码走一遍代码流程,对主要流程有一个大致概念后,再深入细节。
核心流程全览图
读者可以根据图对照代码阅读源码
关键类及关键方法
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