android中httpclient和HttpURLConnection優缺點和常見bug解決方法
https://blog.csdn.net/androidzhaoxiaogang/article/details/8158122
官方意見:
1) apache httpclient比較穩定點,少BUG,但由於API的關係,擴展改造麻煩點,
所以android team現在不鳥這東西了基本
2) httpurlconnection比較輕便,靈活,易於擴展,在2。2前有個BUG,
見https://code.google.com/p/android/issues/detail?id=2939
可以通過如下代碼去解決:
- 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");
- }
- }
GZIP,詳細見:
https://developer.android.com/reference/java/net/HttpURLConnection.html
4) 對HTTPURLCONECTION中,在3。0後以及4。0中都進行了改善,比如對HTTPS的支持,
在4。0中,還增加了對緩存的支持呢!比如下麵的代碼:
- 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) {
- }
- }
穀歌的的建議是,Gingerbread後的版本,都建議用httpurlconnection,獲得更高的性能
5)在android SDk中httpclient使用的是4.0beta2,我不得不說這個版本裏麵有些蛋疼的bug:
I.auth caching;
II.在4.0上的sdk,將wifi和3g同時打開,理論上來說,網絡接口應該走wifi,但是卻走了代理,導致訪問服務器網絡失敗;
解決上麵問題的唯一辦法就是引入“https://code.google.com/p/httpclientandroidlib/”中的庫,然後修改相應的類,典型的例子就是ThreadSafeClientConnManager變成了PoolingClientConnectionManager。
個人意見:
我對穀歌官方開發同事的意見有點不敢雷同,個人更傾向於使用httpclient,因為從PoolingClientConnectionManager得解釋我們就可以知道:
Manages a pool of {@link OperatedClientConnection client connections} and is able to service connection requests from multiple execution threads.
Connections are pooled on a per route basis. A request for a route which already the manager has persistent connections for available in the pool will be services by leasing a connection from the pool rather than creating a brand new connection.
可以節省我們頻繁建立連接的時間,往往在我們的app裏麵更多的情況是,不斷的去下拉列表調用接口,反複創建連接的代價可想而知。
請注意關注我後麵的文章,我會對apache的httpclient 4.2版本的架構做全麵地分析。
最後更新:2017-04-04 07:03:48
上一篇:
Oracle中的文件的執行命令
下一篇:
tc SRM 570 div2 1000 CentaurCompanyDiv2
物聯網之父凱文-阿什頓:物聯網世界充斥著人工智能
雲棲網絡技術峰會-阿裏雲公網產品正確使用姿勢節省50%成本秘訣-PPT和演講文字實錄
ZED Board從入門到精通(三):從傳統ARM開發到PS開發的轉變
Java IO: ByteArrayOutputStream
以大三本科生角度談計算機學習:關於開源產品與學習書籍
《構建實時機器學習係統》一1.7 案例:Netflix在機器學習競賽中學到的經驗
Java1.6多線程之同步方法
關於linux下的mysql配置流程以及項目發布的流程
DirectDraw用到的DDSURFACEDESC2
關於Ubuntu 下新開發板adb 無法識別的問題(成功案例:解決了三星,索愛,OPPO X903案例)