Glide第一个过程

 

MoudleType -> DataType

接口ModelLoader<T, Y>定义了返回实现了DataFetcher的对象。DataFetcher的对象是真正转换操作的执行者。ModelLoader<T, Y>可以看作是“工厂”。

从Uri到xxx

  1. 是否是本地资源协议:”file”、或”content”、或”android.resource”;如果不是,转到“从GlideUrl到xxx”;
  2. 如果是,看是不是Asset资源:协议是“file”、且PathSegment不为空、PathSegment的第一部分为“android_asset”;
  3. 如果是,先调用uri.toString()再去掉前面的“file:///android_asset/”,得到的字符串记为path;再调用assetManager.open(path)获得InputStream;或者调用assetManager.openFd(path).getParcelFileDescriptor()获得PacelFileDescriptor。
  4. 如果不是,调用contentResolver.openInputStream(uri)获得InputStream;或者调用contentResolver.openAssetFileDescriptor(uri, “r”).getParcelFileDescriptor()获得PacelFileDescriptor。

从File到xxx

转为“从Uri到xxx”。

从资源ID到xxx

uri = Uri.parse("android.resouce://"
                  + Resource.getResourcePackageName(id) + '/'
                  + Resource.getResourceTypeName(id) + '/'
                  + Resource.getResourceEntryName(id));
// 然后转为“从Uri到xxx”

从String到xxx

  1. 如果String是以/开头,调用Uri.fromFile(new File(String))转为“从Uri到xxx”。
  2. 否则调用Uri.parse(String)转为“从Uri到xxx”。

从GlideUrl到InputStream 使用HttpUrlConnection下载图片。

从URL到InputStream 把URL包装为HlideUrl,转为“从GlideUrl到InputStream”。

替换HttpUrlConnection