1.okgo:
該庫是封裝了okhttp的標(biāo)準(zhǔn)RESTful風(fēng)格的網(wǎng)絡(luò)框架,可以與RxJava完美結(jié)合塘偎,比Retrofit更簡單易用疗涉。支持大文件上傳下載,上傳進(jìn)度回調(diào)吟秩,下載進(jìn)度回調(diào)咱扣,表單上傳(多文件和多參數(shù)一起上傳),鏈?zhǔn)秸{(diào)用涵防,可以自定義返回對象闹伪,支持Https和自簽名證書,支持超時(shí)自動(dòng)重連壮池,支持cookie與session的自動(dòng)管理祭往,支持四種緩存模式緩存網(wǎng)絡(luò)數(shù)據(jù),支持301火窒、302重定向,擴(kuò)展了統(tǒng)一的上傳管理和下載管理功能驮肉。
1.支持的常用功能
一般的 get,post,put,delete,head,options請求
基于Post的大文本數(shù)據(jù)上傳熏矿,postString(),postJson()等
多文件和多參數(shù)統(tǒng)一的表單上傳(允許監(jiān)聽上傳進(jìn)度)
支持一個(gè)key上傳一個(gè)文件,也可以一個(gè)Key上傳多個(gè)文件
大文件下載和下載進(jìn)度回調(diào)
大文件上傳和上傳進(jìn)度回調(diào)
支持cookie的內(nèi)存存儲和持久化存儲离钝,支持傳遞自定義cookie
提供網(wǎng)絡(luò)緩存功能票编,默認(rèn)支持304緩存協(xié)議,并額外擴(kuò)展了三種本地緩存模式
支持301卵渴、302重定向
支持鏈?zhǔn)秸{(diào)用
支持可信證書和自簽名證書的https訪問
支持根據(jù)Tag取消網(wǎng)絡(luò)請求
支持自定義泛型Callback慧域,自動(dòng)根據(jù)泛型返回對象
具體詳解:okgo 詳解
2.Nohttp
NoHttp簡介:
NoHttp是一個(gè)Android開源網(wǎng)絡(luò)框架,實(shí)現(xiàn)了RFC2616(Http1.1)協(xié)議浪读,一個(gè)標(biāo)準(zhǔn)的Http框架昔榴。支持普通請求、文件的上傳與下載碘橘、自動(dòng)維持Cookie互订、支持RFC2616規(guī)定的所有請求方法(POST、GET痘拆、HEAD……)仰禽、支持Https(包括訪問自簽名網(wǎng)站)、支持請求優(yōu)先級、支持請求與Activity聯(lián)動(dòng)吐葵、提供了五種緩存策略供開發(fā)者選擇……
請求和下載都是隊(duì)列规揪,平均分配每個(gè)線程的資源,支持多個(gè)請求并發(fā)温峭。
支持GET猛铅、POST、PUT诚镰、PATCH奕坟、HEAD、DELETE清笨、OPTIONS月杉、TRACE等請求協(xié)議。
支持基于POST抠艾、PUT苛萎、PATCH、DELETE的文件上傳(Html表單原理)检号。
文件下載腌歉、上傳下載、上傳和下載的狀態(tài)回調(diào)齐苛、錯(cuò)誤回調(diào)翘盖。
提供了五種數(shù)據(jù)緩存策略供開發(fā)者選擇使用。
支持自定義Request凹蜂,利用NoHttp泛型可以解析成任何數(shù)據(jù)格式(String馍驯、Json、JavaBean等)玛痊。
支持Session汰瘫、Cookie的自動(dòng)維持,App重啟擂煞、關(guān)開機(jī)后還持續(xù)維持混弥。
支持Https、自簽名網(wǎng)站Https的訪問对省、支持Https雙向驗(yàn)證蝗拿。
支持取消某個(gè)請求、取消指定多個(gè)請求蒿涎、取消所有請求蛹磺。
支持重定向、多級別重定向同仆。支持代理萤捆、支持Request的優(yōu)先級。
具體使用方式:NoHttp詳解
3.xutils
xUtils一個(gè)Android公共庫框架,主要包括四個(gè)部分:View俗或,Db, Http, Bitmap 四個(gè)模塊市怎。
View模塊主要的功能是通過注解綁定UI,資源辛慰,事件区匠。
Db模塊是一個(gè)數(shù)據(jù)庫orm框架, 簡單的語句就能進(jìn)行數(shù)據(jù)的操作帅腌。
Http模塊主要訪問網(wǎng)絡(luò)驰弄,支持同步,異步方式的請求速客,支持文件的下載戚篙。
Bitmap模塊是加載圖片以及圖片的處理, 支持加載本地溺职,網(wǎng)絡(luò)圖片岔擂。而且支持圖片的內(nèi)存和本地緩存。
詳細(xì)介紹:xutils詳解
4.volley
所謂Volley,它是2013年Google I/O上發(fā)布的一款網(wǎng)絡(luò)框架浪耘,基于Android平臺乱灵,能使網(wǎng)絡(luò)通信更快,更簡單七冲,更健全痛倚。
它的優(yōu)點(diǎn):(1)默認(rèn)Android2.3及以上基于HttpURLConnection,2.3以下使用基于HttpClient澜躺;(2)符合Http 緩存語義 的緩存機(jī)制(提供了默認(rèn)的磁盤和內(nèi)存等緩存)蝉稳;(3)請求隊(duì)列的優(yōu)先級排序;(4)提供多樣的取消機(jī)制苗踪;(5)提供簡便的圖片加載工具(其實(shí)圖片的加載才是我們最為看重的功能);(6)一個(gè)優(yōu)秀的框架削锰。
不足之處也有:它只適合數(shù)據(jù)量小通铲,通信頻繁的網(wǎng)絡(luò)操作,如果是數(shù)據(jù)量大的器贩,像音頻颅夺,視頻等的傳輸,還是不要使用Volley的為好
詳細(xì)介紹:Volley使用及其原理解析
Hashmap
1.HashMap的數(shù)據(jù)結(jié)構(gòu)
數(shù)據(jù)結(jié)構(gòu)中有數(shù)組和鏈表來實(shí)現(xiàn)對數(shù)據(jù)的存儲蛹稍,但這兩者基本上是兩個(gè)極端吧黄。
數(shù)組:數(shù)組存儲區(qū)間是連續(xù)的,占用內(nèi)存嚴(yán)重唆姐,故空間復(fù)雜的很大拗慨。但數(shù)組的二分查找時(shí)間復(fù)雜度小,為O(1);數(shù)組的特點(diǎn)是:尋址容易赵抢,插入和刪除困難剧蹂;
鏈表:鏈表存儲區(qū)間離散,占用內(nèi)存比較寬松烦却,故空間復(fù)雜度很小宠叼,但時(shí)間復(fù)雜度很大,達(dá)O(N)其爵。鏈表的特點(diǎn)是:尋址困難冒冬,插入和刪除容易。
2.存取原理
put 方法:當(dāng)程序試圖將一個(gè)key-value對放入HashMap中時(shí)摩渺,程序首先根據(jù)該 key的 hashCode() 返回值決定該 Entry 的存儲位置:如果兩個(gè) Entry 的 key 的 hashCode() 返回值相同简烤,那它們的存儲位置相同。如果這兩個(gè) Entry 的 key 通過 equals 比較返回 true证逻,新添加 Entry 的 value 將覆蓋集合中原有 Entry的 value乐埠,但key不會覆蓋。如果這兩個(gè) Entry 的 key 通過 equals 比較返回 false囚企,新添加的 Entry 將與集合中原有 Entry 形成 Entry 鏈丈咐,而且新添加的 Entry 位于 Entry 鏈的頭部
get元素時(shí),首先計(jì)算key的hashCode龙宏,找到數(shù)組中對應(yīng)位置的某一元素棵逊,然后通過key的equals方法在對應(yīng)位置的鏈表中找到需要的元素。
假若現(xiàn)在同時(shí)有A線程和B線程同時(shí)獲得了同一個(gè)頭節(jié)點(diǎn)并對其進(jìn)行修改银酗,這樣A寫入頭節(jié)點(diǎn)之后B也寫入頭節(jié)點(diǎn)則會將A的操作覆蓋