1. 程式人生 > >Android中,HttpURLConnection與Apache的DefaultHttpClient哪個更被推薦使用?

Android中,HttpURLConnection與Apache的DefaultHttpClient哪個更被推薦使用?

在Android中,請求網路資源的方式包含了:HttpURLConnection和Apache的DefaultHttpClient。那麼,這兩個方式哪個更被推薦使用呢?Android官方文件為我們推薦HttpURLConnection,而理由是什麼呢?

在Android 4.0,為HttpURLConnection增加了一個response cache(響應快取),這是一個很好的減少http請求次數的機制,Android官方推薦使用HttpURLConnection而不是Apache的DefaultHttpClient的原因就是使用HttpURLConnection不僅有針對android做http請求的優化,而且還在4.0上增加了Reponse Cache,這進一步提高了效率。


我們來看看官方的一個例子:使用反射機制開啟HTTP response cache。

private void enableHttpResponseCache() {
  try {
    long httpCacheSize = 10 * 1024 * 1024; // 10 MiB
    File httpCacheDir = new File(getCacheDir(), "http");
    Class.forName("android.net.http.HttpResponseCache")
         .getMethod("install", File.class, long.class)
         .invoke(null, httpCacheDir, httpCacheSize);
  } catch (Exception httpResponseCacheNotAvailable) {
    Log.d(TAG, "HTTP response cache is unavailable.");
  }
}


上面例子,能夠在Android 4.0以上的裝置上開啟response cache,並且不會影響到之前的程式。在cache被開啟之後,所有cache中的HTTP請求都可以直接在本地儲存中進行響應,當Android需要請求同樣的資源時,通過cache,就不需要開啟一個新的網路連線去獲取資源了,而且被cache起來的response可以被server所確保沒有過期,這樣可以有效地減少頻寬;而沒有被cached的response會因方便下次請求而被儲存在response cache中。