从下载机制说起,默认实现类是 OkHttp3Downloader,显然采用 OkHttp 去下载图片了。 OkHttp3Downloader 对象的创建需要一个缓存路径,这个路径选用了 ApplicationContext 的 getCacheDir 路径。除了路径,还需要知道缓存空间的大小,这个空间介于 5 ~ 50 MB。
public OkHttp3Downloader(final File cacheDir, final long maxSize) {
this(new OkHttpClient.Builder().cache(new Cache(cacheDir, maxSize)).build());
sharedClient = false;
}
最后会调用这个构造方法,新建了一个 OkHttpClient 对象,并设置缓存,缓存配置就是前面说的。并且指明这个 OkHttpClient 对象不被共享,也就是相当于 Picasso 专用。
load
@Override public Response load(@NonNull Request request) throws IOException {
return client.newCall(request).execute();
}
OkHttp3Downloader 对 load 方法的实现其实就是利用 OkHttpClient 去发起一个请求。
shutdown
public void shutdown() {
if (!sharedClient && cache != null) {
try {
cache.close();
} catch (IOException ignored) {}
}
}
shutdown 的实现主要做了 cache.close 操作,这个 cache 是 okhttp3 包里的类,在创建时会通过 DiskLruCache 类来创建一个 DiskLruCache 对象,close 方法也正是调用了 DiskLruCache 对象的 close 方法,简单看应该是停止并清空缓存。
网友评论