Glide加载流程
2018-12-20 11:34:58 0 举报
Glide加载流程
作者其他创作
大纲/内容
没指定宽高时
2、当设置了缩略的比例thumbSizeMultiplier(0 ~ 1)时,不需要递归建立缩略图请求
1
target.getSize(this);
先清空请求,加入延迟请求队列(为了对这些请求维持一个强引用,使用了ArrayList实现) pendingRequests.add(request);
decodeResourceWithList(...);
3.into
Resource<ResourceType> decoded = decodeResource(...);
3
result = BitmapFactory.decodeStream(...)
Bitmap downsampled = decodeStream(...);
ByteBufferBitmapDecoder.decode()
engine.load(...);
DecodeJob.decodeFromRetrievedData();
暂停状态
调用自身的BitmapImageViewTarget.setResource(resource);
result = decoder.decode(...);
get((FragmentActivity) context)或get((Activity) context)或get(((ContextWrapper) context).getBaseContext()
否
是
DecodeJob.run();
job.handleResultOnMainThread();
非暂停状态
1、注册ResourceCallback接口engineJob.addCallback(cb); 2、内部开启线程去请求engineJob.start(decodeJob);
loadWithExceptionList(...);
RequestBuilder<TranscodeType>
obtainRequest()
getApplicationManager(context)
根据给定的配置进行加载,engine是一个负责加载、管理活跃和缓存资源的引擎类
Glide.with(mContext)
3、没有缩略图请求时,直接获取一个正常图请求
1、当设置了缩略图请时
2、load
1、Glide初始化2.使用RequestManagerFactory建立RequestManager对象。(在构造参数时,指定生命周期 new ApplicationLifecycle())
DecodeJob.runWrapped();
downsampler.decode(...)
buildRequestRecursive(...)
as(Drawable.class)
2
target的实现类是BitmapImageViewTarget
这里的实现类是ByteBufferBitmapDecoder
SingleRequest.begin()
SingleRequest为cb的实现类
getStreamForSuccessfulRequest(urlConnection);
buildThumbnailRequestRecursive(...)
SourceGenerator.startNext();
1、先从弱引用中查找,如果有的onResourceReady并直接返回
调用父类ImageViewTarget.onResourceReady(...)
RequestManager.load(str)(有多个load重载方法,选取最常用的一个介绍)
asDrawable().load(bitmap)
主线程或context不是Application ?
EngineJob实现了DecodeJob.CallBack
Glide加载流程
requestTracker.runRequest(request);
getRetriever(context).get(context)
1、with
1、添加隐藏Fragment 2、Glide初始化3.使用RequestManagerFactory建立RequestManager对象
END
如果内存中没有,则创建engineJob(decodejob的回调类,管理下载过程以及状态)和创建解析工作对象decodeJob
调用到DownSampler内部的方法
1、runGenerators();将获取的数据解码成对应的资源2、decodeFromRetrievedData();
最终得到一个SingleRequest对象
如果不是暂停状态则开始请求 request.begin();
调用到DecodePath内部的方法
1.context为Fragment或FragmentActivity时,添加supportFragment2.context为Activity时,添加Fragment3.context为view时,获取当前的Activity,根据不同的情况调用不同的get重载方法
根据imageView的宽高算出图片的宽高,最终也会走到onSizeReady
path.load(...);
根据转码类transcodeClass类型返回不同的ImageViewTarget(只支持以下2种):1.BitmapImageViewTarget2.DrawableImageViewTargetImageViewTarget的作用:把要展示的对象封装成目标类
SingleRequest.obtain()
RequestBuilder<TranscodeType>.into(imageView)
loadData.fetcher.loadData(span style=\"font-size: inherit;\
HtttpUrlFetcher.loadData(...);
1、从数据中解码得到资源resource = decodeFromData(...);编码和发布最终得到的Resource<Bitmap>对象2、notifyEncodeAndRelease(...);
result = path.decode(...);
当使用override() API为图片指定了一个固定的宽高时直接执行onSizeReady, 最终的核心处理位于onSizeReady
loadGeneric(string)
调用父类ImageViewTarget.setResourceInternal((@Nullable Z resource)
view.setImageBitmap(resource);
提供下载的流数据
0 条评论
下一页