一、原理图
二、图解说明
(1)创建OkHttpClient对象okHttpClient,对应上图标记(1)
okHttpClient = new OkHttpClient.Builder()//构建器
.connectTimeout(10, TimeUnit.SECONDS)//连接超时
.writeTimeout(10, TimeUnit.SECONDS)//写入超时
.readTimeout(10, TimeUnit.SECONDS)//读取超时
.cache(new Cache(sdcache.getAbsoluteFile(), cacheSize))
//设置缓存
.build();
(2)创建Request request对象,对应上图(2)
Request request = new Request.Builder()
.url(url)
.get()
.build();
(3)创建Call对象,对应上图(3)
Call call = okHttpClient.newCall(request);
(4)调用RealCall类里面的静态方法newRealCall(),对应上图(4)
(5)Call是一个接口,RealCall实现了这个接口,调用RealCall里面的enqueue()方法,对应上图(5)
(6)调用Dispatcher类里面的enqueue()方法,对应上图(6)
(7)调用Dispatcher类里面的promoteAndExecute()方法,对应上图(7)
(8)调用Dispatcher类里面的executorService()方法,创建线程池,对应上图(8)
public synchronized ExecutorService executorService() {
if (executorService == null) {
executorService = new ThreadPoolExecutor(0, Integer.MAX_VALUE, 60, TimeUnit.SECONDS,
new SynchronousQueue<Runnable>(), Util.threadFactory("OkHttp Dispatcher", false));
}
return executorService;
}