android網(wǎng)絡(luò)請求框架

android application http arch

Http 框架調(diào)查分析

概述 app的http提供的是什么有的服務,對這些lib有哪些的性能要求,會容易出現(xiàn)什么錯誤?

android中里各個部分處理都有一些成熟的框架趴泌,如在博客里作者的分析一樣堡牡,這里主要分析網(wǎng)絡(luò)請求的部分午绳。

android里的網(wǎng)絡(luò)連接主要是socket和http筒溃。但http使用較多马篮。

1 android 網(wǎng)絡(luò)請求框架概述

1.1 較底層的封裝

如okhttp,基于http協(xié)議封裝的一套客戶端铡羡,面向真正的請求积蔚;

httpClient,提供支持http協(xié)議的客戶端編程工具包烦周,實現(xiàn)了所有http方法,如GET POST等怎顾;

HttpUrlConnection

1.1.1 httpClient分析

HttpClient是Apache Jakarta Common下的子項目读慎,用來提供高效的、最新的槐雾、功能豐富的支持HTTP協(xié)議的客戶端編程工具包夭委,并且它支持HTTP協(xié)議最新的版本和建議。HttpClient已經(jīng)應用在很多的項目中募强,比如Apache Jakarta上很著名的另外兩個開源項目Cactus和HTMLUnit都使用了HttpClient株灸。
下載地址: http://hc.apache.org/downloads.cgi
一個get的例子:

HttpGet httpGet = new HttpGet("http://www.baidu.com");
CloseableHttpResponse response = httpclient.execute(httpget);  
            try {  
                HttpEntity entity = response.getEntity();  
                if (entity != null) {  
                    System.out.println("Response content: " + EntityUtils.toString(entity));  
                }  
            } finally {  
                response.close();  
            }  
        } catch (ClientProtocolException e) {  
            e.printStackTrace();  
        } catch (ParseException e) {  
            e.printStackTrace();  
        } catch (IOException e) {  
            e.printStackTrace();  
        } finally {  
            try {  
                httpclient.close();  
            } catch (IOException e) {  
                e.printStackTrace();  
            }  
        }

1.1.2 okHttp分析

square實現(xiàn)的庫,高效擎值,支持SPDY慌烧,連接池、GZIP和 HTTP 緩存鸠儿。默認情況下屹蚊,OKHttp會自動處理常見的網(wǎng)絡(luò)問題,像二次連接进每、SSL的握手問題汹粤。支持同步,異步田晚,

okHttp官網(wǎng)

一個簡單get的例子:

OkHttpClient client = new OkHttpClient();

String run(String url) throws IOException {
  Request request = new Request.Builder()
      .url(url)
      .build();

  Response response = client.newCall(request).execute();
  return response.body().string();
}

1.2 較高層的封裝

1.2.1 volley

內(nèi)部基于HttpUrlConnection嘱兼,HttpClient,OkHttp

google自己的贤徒,適合數(shù)據(jù)量不大芹壕,通信頻繁的網(wǎng)絡(luò)操作汇四。不支持同步,不能post大數(shù)據(jù)哪雕,異步庫船殉,

volley提供的功能:

  • json 圖像的異步下載
  • 網(wǎng)絡(luò)請求的排序
  • 網(wǎng)絡(luò)請求的優(yōu)先級處理
  • 緩存
  • 多級別的取消請求
  • 與Activity的交互

volley的架構(gòu)設(shè)計:

基礎(chǔ)結(jié)構(gòu)為線程池,分為主線程斯嚎,cache線程利虫,network線程。

links of blog

volley arch

get 的例子:

private void loadGetStr(String url) {  
  
    StringRequest srReq = new StringRequest(Request.Method.GET, url,  
            new StrListener(), new StrErrListener()) {  
  
        protected final String TYPE_UTF8_CHARSET = "charset=UTF-8";  
  
        // 重寫parseNetworkResponse方法改變返回頭參數(shù)解決亂碼問題  
        // 主要是看服務器編碼堡僻,如果服務器編碼不是UTF-8的話那么就需要自己轉(zhuǎn)換糠惫,反之則不需要  
        @Override  
        protected Response<String> parseNetworkResponse(  
                NetworkResponse response) {  
            try {  
                String type = response.headers.get(HTTP.CONTENT_TYPE);  
                if (type == null) {  
                    type = TYPE_UTF8_CHARSET;  
                    response.headers.put(HTTP.CONTENT_TYPE, type);  
                } else if (!type.contains("UTF-8")) {  
                    type += ";" + TYPE_UTF8_CHARSET;  
                    response.headers.put(HTTP.CONTENT_TYPE, type);  
                }  
            } catch (Exception e) {  
            }  
            return super.parseNetworkResponse(response);  
        }  
    };  
    srReq.setShouldCache(true); // 控制是否緩存  
    startVolley(srReq);  
}  

源碼分析:

arch:RequestQueue->Dispatch Thread ->Get Data Interface -> Data

RequestQueue: StringRequest, JsonRequest,ImageRequest , ...

DispatchTread: cacheDispatcher, NetworkDispatcher

...

volley: API user via RequestQueue to launch a request queue, whitch contains the request need to send.
Request: base class for all network requests.
RequestQueue: 請求分發(fā)隊列,
cacheDispatcher: 處理緩存的請求的線程
NetworkDispatcher: 處理網(wǎng)絡(luò)請求的線程

1.2.2 androi-async-http

內(nèi)部基于httpClient钉疫,異步庫硼讽,android現(xiàn)在不推薦使用httpClient

1.2.3 liteHttp

框架簡介博客地址

1.2.4 Retrofit

開發(fā)者是square,類似于volley的更高層的封裝庫牲阁,默認下面是okhttp固阁。Retrofit簡化了網(wǎng)絡(luò)請求的流程,提供不同的Json Converter實現(xiàn)城菊,提供RxJava支持备燃,還有Dagger2.比volley解耦更徹底,

retrofit提供的功能:

  • 配置不同的http client
  • 配置不同的反序列化工具來進行網(wǎng)絡(luò)解析

分析的links:http://www.reibang.com/p/45cb536be2f4

Alt text
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末凌唬,一起剝皮案震驚了整個濱河市并齐,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌客税,老刑警劉巖况褪,帶你破解...
    沈念sama閱讀 221,198評論 6 514
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異更耻,居然都是意外死亡测垛,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,334評論 3 398
  • 文/潘曉璐 我一進店門酥夭,熙熙樓的掌柜王于貴愁眉苦臉地迎上來赐纱,“玉大人,你說我怎么就攤上這事熬北「砻瑁” “怎么了?”我有些...
    開封第一講書人閱讀 167,643評論 0 360
  • 文/不壞的土叔 我叫張陵讶隐,是天一觀的道長起胰。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么效五? 我笑而不...
    開封第一講書人閱讀 59,495評論 1 296
  • 正文 為了忘掉前任地消,我火速辦了婚禮,結(jié)果婚禮上畏妖,老公的妹妹穿的比我還像新娘脉执。我一直安慰自己,他們只是感情好戒劫,可當我...
    茶點故事閱讀 68,502評論 6 397
  • 文/花漫 我一把揭開白布半夷。 她就那樣靜靜地躺著,像睡著了一般迅细。 火紅的嫁衣襯著肌膚如雪巫橄。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,156評論 1 308
  • 那天茵典,我揣著相機與錄音湘换,去河邊找鬼。 笑死统阿,一個胖子當著我的面吹牛彩倚,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播扶平,決...
    沈念sama閱讀 40,743評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼署恍,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了蜻直?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,659評論 0 276
  • 序言:老撾萬榮一對情侶失蹤袁串,失蹤者是張志新(化名)和其女友劉穎概而,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體囱修,經(jīng)...
    沈念sama閱讀 46,200評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡赎瑰,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,282評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了破镰。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片餐曼。...
    茶點故事閱讀 40,424評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖鲜漩,靈堂內(nèi)的尸體忽然破棺而出源譬,到底是詐尸還是另有隱情,我是刑警寧澤孕似,帶...
    沈念sama閱讀 36,107評論 5 349
  • 正文 年R本政府宣布踩娘,位于F島的核電站,受9級特大地震影響喉祭,放射性物質(zhì)發(fā)生泄漏养渴。R本人自食惡果不足惜雷绢,卻給世界環(huán)境...
    茶點故事閱讀 41,789評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望理卑。 院中可真熱鬧翘紊,春花似錦、人聲如沸藐唠。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,264評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽中捆。三九已至鸯匹,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間泄伪,已是汗流浹背殴蓬。 一陣腳步聲響...
    開封第一講書人閱讀 33,390評論 1 271
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留蟋滴,地道東北人染厅。 一個月前我還...
    沈念sama閱讀 48,798評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像津函,于是被迫代替她去往敵國和親肖粮。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,435評論 2 359

推薦閱讀更多精彩內(nèi)容