Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> 解決Android httpclient網絡post/get請求性能優化

解決Android httpclient網絡post/get請求性能優化

編輯:關於Android編程

背景介紹

這是一個webapp和nativeapp相結合的項目,webapp負責ui和業務邏輯,包含網絡請求、數據存儲、手機信息獲取、app統計分析、webapp和整體app升級控制,nativeapp負責給webapp提供網絡請求(跨域訪問),app統計分析(集成countly sdk)調用,升級資源的下載和解壓安裝;

其實這不是一個很好的架構設計,例如:app的一級菜單都是webapp,你想用戶每次點擊菜單都會發起網絡請求,所以一想項目中webapp跟nativeapp的層次關系就知道會出很多問題;


問題來了

測試人員說webapp登錄有時候長達3-5秒,偶爾發生沒有規律,也是無法忍受的;因為在wifi環境下都如此,要是用戶在2G網路下,問題會放大的。


插曲

webapp開發人員開始說server端登錄耗時長,在排除了server問題之後,開始說android網絡通信有問題,嗯,本人不太像bs前端工程師,可以理解,畢竟前端工程師從來就沒有考慮過手機系統優化問題,所有出現類似的請求也在意料之中。


問題尋找

android工程師,看了自己的網絡代理代碼,如下:

public class HttpClientFactory {
	 private static DefaultHttpClient client;

	    public synchronized static DefaultHttpClient getThreadSafeClient() {
	  
	        if (client != null)
	            return client;
	         
	        client = new DefaultHttpClient();
	        
	        ClientConnectionManager mgr = client.getConnectionManager();
	        
	        HttpParams params = client.getParams();
	        
	        
	        
			
			HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);
			// 請求超時 
			HttpConnectionParams.setSoTimeout(params, 15000);
			HttpConnectionParams.setTcpNoDelay(params, true);//nagle算法默認是打開的,會引起delay的問題;所以要手工關掉。
			HttpConnectionParams.setConnectionTimeout(params, 15000);
	        
	        
	        client = new DefaultHttpClient(
	        new ThreadSafeClientConnManager(params,
	            mgr.getSchemeRegistry()), params);
	  
	        return client;
	    } 
}
連nagle算法都關閉了,哎,其實這個nagle算法關不關閉都不會影響的。隨後也檢查了,每次的網絡請求都是線程控制的,甚至他都把其它不重要的網絡請求線程的優先級設置成Process.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND) 都沒效果。


android工程師,又重新寫了一個訪問server的app,順序執行100次,均很正常;這說明了webapp的業務邏輯調用出問題了。


最後發現:

webapp在webview加載完自己的登錄頁面就開始調用countly統計分析的初始化,結果造成了countly數據發送和webapp登錄請求並發,自然就會出現有時候耗時長的問題;

雖然這篇的文章標題和內容不太相符,但是我想提醒大家,做app一定合理安排好業務邏輯,充分適當地用好網絡請求這種寶貴而影響用戶體驗的資源。


隨後對於webapp的業務優化開展:

1、 全部的網絡請求放在登錄成功後延時10秒執行。

2、countly監控數據匯報和app升級下載放在,activity onstop 裡執行。

3、合並多個並發網絡請求為一次網絡請求,減少並發。



  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved