記錄下學習心得:
先貼下volley的架構圖:
volley框架設計的主要幾個類是request(以及volley提供的子類imagerequest,stringrequest,jsonreques等),volly,requestqueue,cachedispatcher,diskbasedcache,networkdispatcher,basicnetwork,hurlstack(httpclientstack),bytearraypool,networkresponse,excutordeliery(按照從新建乙個request請求到請求得到處理的順序寫的)。
下面的分析也是按照請求從建立到得到處理的順序來完成的。
在volley框架中,request的管理是由requestqueue來控制的。當我建立乙個新的request請求時,先建立乙個requestqueue物件,
requestqueue= volley.newrequestqueue(context);
看下newrequestqueue裡面做了什麼。
}首先在android 預設的快取檔案中建立乙個快取目錄,在這裡為什麼選擇系統預設的快取資料夾,是因為放在系統預設的資料夾下,當apk刪除時,資料夾下的快取也相應被刪除。
設定useragent後,開始建立httpstack,volley根據系統版本來建立不同stack,如果sdk的版本小於9的話,選擇htpclientsack,否則選擇hurlstack,volley這樣做的原因是
在 froyo(2.2) 之前,httpurlconnection 有個重大 bug,呼叫 close() 函式會影響連線池,導致連線復用失效,所以在 froyo 之前使用 httpurlconnection 需要關閉 keepalive。
另外在 gingerbread(2.3) httpurlconnection 預設開啟了 gzip 壓縮,提高了 https 的效能,ice cream sandwich(4.0) httpurlconnection 支援了請求結果快取。
再加上 httpurlconnection 本身 api 相對簡單,所以對 android 來說,在 2.3 之後建議使用 httpurlconnection,之前建議使用 androidhttpclient。
建立玩httpstack後,開始建立請求佇列,requestqueue裡的引數有兩個,乙個是快取處理類(diskbasedcache),乙個是網路請求處理類(basicnetwork),初始化完畢後,呼叫queue.start()方法,啟動線 程(這部分在requestqueue中再分析)等待request的到來。
Volley 原始碼分析
http 網路請求到底是怎麼傳送 http 網路請求的響應是怎麼分發 volley 中關鍵的類之間的關係 關鍵的類 1.http 網路請求怎麼傳送出去的?requestqueue.add start requestqueue的 add 方法,把 reqeust 物件新增到 mcachequeue 佇...
Volley框架的學習
在學習郭霖前輩的部落格 後自己做的簡要學習筆記,為的是提煉下思路,在心裡能有個整體的框架。由淺入深 一 stringrequest使用步驟 1 定義訊息佇列 requestqueue 2 定義stringrequest,傳入 監聽方法等 3 用佇列載入請求 add方法 二 imagerequest使...
Volley的學習筆記
1,上傳客戶端到服務端的請求頭資訊 stringrequest request new stringrequest urlvalcode,new valcodelistener new valcodeerrorlistener requestqueue.add request 自己修改原始碼的方式 ...