【发布时间】:2013-04-03 11:05:36
【问题描述】:
我的 android 应用程序正在调用经过身份验证的 Web 服务 API,以根据数据类型从服务器下载和同步记录。
例如:
应用程序为不同的内容类型(Commerce, Science, Arts)循环调用API。
现在,对于每种内容类型,应用程序都会维护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 = "abc@myserver.com", 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 - 我没有卡在 http 上,可以使用 java 中的任何最佳技术来提高性能。
-
有系统(我不记得具体是哪个)在多部分请求中一次发送多个请求
标签: java android performance httpurlconnection persistent-connection