我的 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 = "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 中使用任何其他技术。
主要目的是使连接持久化,以便应用程序不应该为每次调用一次又一次地创建它,因为每次调用应用程序都会创建一个单独的连接,这会消耗更多时间。