官方說明
簡要總結(jié)
- HTTP Client擁有龐大而靈活地APIs蚂夕,實現(xiàn)很穩(wěn)定十嘿,正因為此董饰,我們很難在不破壞兼容性的前提下對其進行優(yōu)化姐直,Android團隊也沒有積極開發(fā)HTTP Client倦淀;
- HttpURLConnection是一個適用于大多數(shù)應(yīng)用程序的通用輕量級HTTP客戶端。這個類起初體量不大声畏,但其專注的API使我們能夠輕松提升其穩(wěn)定性撞叽。
- 在Froyo(2.2)之前的版本中,HttpURLConnection有許多令人崩潰的錯誤。尤其是在一個可讀的InputStream中調(diào)用close()會堵死連接池能扒。通過禁用連接池解決此問題:
private void disableConnectionReuseIfNecessary() {
// HTTP connection reuse which was buggy pre-froyo
if (Integer.parseInt(Build.VERSION.SDK) < Build.VERSION_CODES.FROYO) {
System.setProperty("http.keepAlive", "false");
}
- 在Gingerbread(2.3)中佣渴,我們添加了transparent response compression(透明響應(yīng)壓縮)。 HttpURLConnection將自動將此標(biāo)頭添加到傳出請求初斑,并處理相應(yīng)的響應(yīng):
Accept-Encoding: gzip
我們還在Gingerbread中對HTTPS進行了一些改進辛润。 HttpsURLConnection嘗試連接服務(wù)器名稱指示(SNI),允許多個HTTPS主機共享IP地址见秤。它還支持壓縮和session tickets砂竖。如果連接失敗,則會在沒有這些功能的情況下自動重試鹃答。這使得連接到最新服務(wù)器時HttpsURLConnection有效乎澄,而不會破壞與舊服務(wù)器的兼容性。
- 在Ice Cream Sandwich(4.0)中测摔,HttpsURLConnection增加了響應(yīng)緩存置济。
Which client is best?
- Apache HTTP客戶端在Eclair和Froyo上有更少的錯誤。 它是這些版本的最佳選擇锋八。
- 對于Gingerbread和之后的版本浙于,HttpURLConnection是最好的選擇。 它的簡單的API和小尺寸使它非常適合Android挟纱。 透明壓縮和響應(yīng)緩存減少網(wǎng)絡(luò)使用羞酗,提高速度和節(jié)省電池。 新的應(yīng)用程序應(yīng)該使用HttpURLConnection; 值得我們繼續(xù)投入精力紊服。