No1:
Volley源碼分析:
Volley.newRequestQueue->
RequestQueue.start()->
CacheDispatcher.start()->CacheDispatcher.run()->
NetworkDispatcher.start()->NetworkDispatcher.run()->
RequestQueue.add()->
BasicNetwork.performRequest()->
HttpStack.performRequest()->
Delivery.postResponse()->
ExecutorDelivery.ResponseDeliveryRunnable->
Request.deliverResponse()->
Response.Listener.onResponse()->
說明:
Volley分為三類線程,分别是主線程、緩存排程線程和網絡排程線程,其中網絡排程線程預設開啟4個。
首先請求會加入緩存隊列,緩存排程線程從緩存隊列中取出請求。如果找到該請求的緩存響應就直接讀取緩存的響應并解析,然後回調給主線程;
如果沒有找到緩存的響應,則将這條請求加入網絡隊列,然後網絡排程線程會輪詢取出網絡隊列中的請求,取出後發送HTTP請求,解析響應并将響應存入緩存,并回調給主線程。
No2:
OkHttp源碼分析:
OkHttpClient.newCall(request)->
RealCall.enqueue->
Dispatcher.enqueue->
RealCall.execute->
client.dispatcher().finished()->promoteCalls->
AsyncCall.execute->getResponseWithInterceptorChain->getResponse()->
HttpEngine.sendRequest->readResponse->
RealCall.getResponse->
HttpEngine.recover->
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsISPrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdsATOfd3bkFGazxCMx8VesATMfhHLlN3XnxCMwEzX0xiRGZkRGZ0Xy9GbvNGLpZTY1EmMZVDUSFTU4VFRR9Fd4VGdsYTMfVmepNHLrJXYtJXZ0F2dvwVZnFWbp1zczV2YvJHctM3cv1Ce-cmbw5iN3ETN2QGNyUjMkVjNhFWYjNDOycDMmljNklTM3QjMk9CXxEzLchDMxIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjL5M3Lc9CX6MHc0RHaiojIsJye.png)
No3:
Okhttp連接配接池複用的核心就是用Deque<RealConnection>來存儲連接配接,通過put、get、connectionBecameIdle和evictAll幾個操作來對Deque進行操作,另外通過判斷連接配接中的計數對象StreamAllocation來進行自動回收連接配接。
No4:
Retrofit注解分類
1)HTTP請求方式注解:GET、POST、PUT、DELETE、HEAD、PATCH、OPTIONS、HTTP(可替換或擴充前7種)
2)标記類注解:FormUrlEncoded、Multipart、Streaming(流)
3)參數類注解:Header、Headers、Body、Path、Field、FieldMap、Part、PartMap、Query、QueryMap
No5:
Retrofit源碼解析
Retrofit.Builder()->
Platform.get()->findPlatform->
Retrofit.build()->
Retrofit.create->loadServiceMethod->
ServiceMethod.Builder->
ExecutorCallAdapterFactory.get->
ExecutorCallbackCall.enqueue->
delegate.enqueue->OkHttpCall.enqueue->
okhttp3.Call.enqueue->parseResponse->toResponse->