Android 包含了兩種 HTTP Client:HttpURLConnection 和 Apache HTTP Client。兩者都支持 HTTPS,流上傳和下載,訪問超時設置,IPV6 和連接池。
Apache HTTP Client
DefaultHttpClient 和他的姊妹 AndroidHttpClient 都從 HTTP Client 繼承而來。它們有大量、靈活的 API,實現也穩定,bug 少。
但是大量的 API 也使得 Android 團隊在不破壞兼容性的情況下對其改進比較困難。所以 Android 團隊現在對其的維護比較少了。
HttpURLConnection
HttpURLConnection 是一個通用的、輕量化的 HTTP Client。剛開始其實現過于簡單,但是也比較容易穩固地改進。
Froyo(2.2)之前,HttpURLConnection 有一些令人沮喪的 bug。
Android 6.0 移出了對 Apache HTTP Client 的支持。如果你的 App 的 target API 高于等于 Android 2.3(API 9),應該使用 HttpURLConnection。HttpURLConnection 的性能更好,因為它通過自動壓縮和響應緩存減少了網絡請求,還減少電量消耗。如果你依然堅持時候用 Apache HTTP API 的話,你一定要在build.gradle
中聲明:
android { useLibrary 'org.apache.http.legacy'}
即使加入這句話以后,也有可能出現如下編譯錯誤:
" Unable to find optional library: org.apache.http.legacy"
解決辦法:
1、看看目錄E:\software\Android\sdk\platforms\android-23\optional 下有沒有org.apache.http.legacy.jar 和 optional.json
2、如果沒有optional.json,則自己新建一個這樣的文件,然后加入如下內容:
[
{
"name": "org.apache.http.legacy",
"jar": "org.apache.http.legacy.jar",
"manifest": false
}
]
本文是在以下文章中整合的: