我的Android應用程序在調用Web服務認證API基於類型的數據從服務器下載和同步記錄。永久連接調用
例如:
應用程序呼叫API在循環對不同內容類型(Commerce, Science, Arts
)。
現在對於每個內容類型,應用程序維護last sync date
所以它只能是日期,統計最近一個月後同步數據。
API調用看起來像:
private void loadData(){
String apiUrl = "";
String[] classArray = { "Commerce", "Science", "Arts" };
try{
for(int classIndex = 0; classIndex < classArray.length; classIndex++){
apiUrl = "http://www.myserver.com/datatype?class="+classArray[classIndex]+"&syncDate="+lastSyncDate;
String responseStr = getSyncData(apiUrl);
// Code to parse the JSON data and store it in SqliteDB.
}
}catch (Exception e) {
e.printStackTrace();
}
}
private String getSyncData(String webservice){
String line = "", jsonString = "";
try{
URL url = new URL(webservice);
HttpURLConnection conn = (HttpURLConnection) url.openConnection(Proxy.NO_PROXY); //using proxy may increase latency
conn.setInstanceFollowRedirects(false);
String userName = "[email protected]", password = "abc123";
String base64EncodedCredentials = Base64.encodeToString((userName
+ ":" + password).getBytes(), Base64.URL_SAFE
| Base64.NO_WRAP);
conn.setRequestProperty("Authorization", "basic "+ base64EncodedCredentials);
BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));
while ((line = rd.readLine()) != null) {
// Process line...
return line;
}
rd.close();
}
}catch (Exception e) {
e.printStackTrace();
}
return jsonString;
}
此方法getSyncData()
返回JSON
響應,該響應被解析並存儲在SqliteDb
。
此代碼工作正常。但是,如果classArray
中的內容類型更多,並且每個類都有大數據集,則會存在輕微的性能問題。
我的問題是:
爲了改善這一過程中的整體表現,我可以打開 到www.myserver.com
連接,並通過與循環API調用的參數,以停止對每個內容連連創建連接類型。
這裏我使用HttpURLConnection
的API調用,但可以在Java中使用的任何其他技術。
主要目的是使連接持久的,因此該應用程序不應該一次又一次地創造它爲每個調用,因爲每次調用應用程序創建它消耗更多的時間一個單獨的連接。
HTTP不是永久性協議 – njzk2 2013-04-11 09:53:06
@ njzk2 - 我不是停留在HTTP,可以使用任何最好的技術在Java中,以提高性能。 – 2013-04-11 09:54:31
有系統(我不記得具體是哪個)在多部分請求中一次發送多個請求 – njzk2 2013-04-11 09:59:47