一、原理圖
二、圖解說明
(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;
}