我的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