Glide源码解析02-load
来源:互联网 发布:linux查看实时日志命令 编辑:程序博客网 时间:2024/06/06 00:12
Glide源码解析02-load
最简单的Glide调用,如下所示,下面将根据Glide的调用顺序,进行源码解析。
Glide.with(this) .load(uri) .into(img);
load方法
从上一步with中,我们得到了RequestManager对象,下面再来看RequestManager#load方法。
load方法也有很多重载,比如Sting、Uri、File、Integer等。
简析
load方法主要是创建DrawableTypeRequest,并将记录相关的uri等数据供后续使用。
详情
以下以String的重载为例。
2.0 RequestManager#load()
load方法的内部先会调用fromString(),获取到DrawableTypeRequest后,再调用其DrawableTypeRequest#load()。
public DrawableTypeRequest<String> load(String string) { return (DrawableTypeRequest<String>) fromString().load(string);}
2.1 fromString()
fromString()中,直接调用了loadGeneric(),并传入了String.class 这个参数。
public DrawableTypeRequest<String> fromString() { return loadGeneric(String.class);}
2.2 loadGeneric()
在loadGeneric()中,调用了Glide.buildStreamModeLoader和Glide.buildFileDescriptorModeLoader来获取ModelLoader对象。
ModelLoader对象用于加载图片,内部有一个getResourceFetcher()方法,用于获取DataFetcher对象,DataFetcher是用于从网络,磁盘等地方获取图片的,这个在后续中会用到。
之后,会new一个DrawableTypeRequest对象并把streamModelLoader和fileDescriptorModelLoader都传入。
DrawableTypeRequest提供asBitmap和asGif的这两个方法,分别用于强制加载静态图片和动态图片。
最后调用RequestManager#optionsApplier.apply将DrawableTypeRequest赋值给相关字段。
private <T> DrawableTypeRequest<T> loadGeneric(Class<T> modelClass) {ModelLoader<T, InputStream> streamModelLoader = Glide.buildStreamModelLoader(modelClass, context);ModelLoader<T, ParcelFileDescriptor> fileDescriptorModelLoader = Glide.buildFileDescriptorModelLoader(modelClass, context);//...return optionsApplier.apply( new DrawableTypeRequest<T>(modelClass, streamModelLoader, fileDescriptorModelLoader, context, glide, requestTracker, lifecycle, optionsApplier));}
回到 2.0,我们再来看DrawableTypeRequest.load()
2.3 DrawableTypeRequest.load()
DrawalbeTypeRequest.load()直接调用了其父类的load()
在父类GenericRequestBuilderload()中,仅将参数进行了记录。
GenericRequestBuilder#load()
public GenericRequestBuilder<ModelType, DataType, ResourceType, TranscodeType> load(ModelType model) { this.model = model; isModelSet = true; return this;}
至此,完成了load()方法的全部调用,并返回了GenericRequestBuilder(或其子类)对象。
更多
Glide源码解析01-with
Glide源码解析02-load
Glide源码解析03-into
Glide源码解析04-decode
Glide源码解析05-onLoadComplete
Glide源码解析06-Glide流程图
- Glide源码解析02-load
- Glide 源码解析
- Android Glide源码解析
- Android Glide源码解析
- Glide 源码解析
- Glide 源码解析
- Android Glide源码解析
- Android Glide源码解析
- Glide源码解析
- Glide源码解析
- Glide源码解析
- glide:源码解析
- Glide源码解析
- 深入解析Glide源码
- Glide缓存源码解析
- Glide源码解析
- Glide V4源码解析
- Glide源码解析06-Glide流程图
- Node.js(一)
- [算法-java] 将一个矩阵按照从外向里以顺时针的顺序打印出每一元素
- Unity 截屏 录屏 的方法参考
- python 下 mongodb 简单操作整理
- GridView的用法
- Glide源码解析02-load
- 关于一个页面的后台制作
- start方式开启服务
- Android NotificationManager 和 Notification的使用总结
- 在win7下安装SQL sever2005(完整版)
- Web应用程序配置
- java应用程序利用Exe4j打包exe文件 以及获取exe执行路径
- 解决Android内存泄漏--MAT\android studio使用方法实例
- 迷宫