okhttp原理(Okhttp-3.12.0)

一、原理圖 

 

二、圖解說明 

(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;
  }

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章