Tim*_*son 6 android inputstream httpurlconnection androidhttpclient
与使用相同服务器端服务的iPhone App相比,HttpURLConnection.getInputStream需要花费大量时间。
以下代码用于该服务:
date= new java.util.Date();
Log.d("time","Time Stamp before posting "+new Timestamp(date.getTime()));
URL ur= new URL(url);
HttpURLConnection conn = (HttpURLConnection) ur.openConnection();
conn.setRequestProperty("Connection", "close");
conn.setReadTimeout(10000);
conn.setConnectTimeout(15000);
conn.setRequestMethod("POST");
conn.setDoInput(true);
conn.setDoOutput(true);
OutputStream os = conn.getOutputStream();
BufferedWriter writer = new BufferedWriter(
new OutputStreamWriter(os, "UTF-8"));
writer.write(getQuery(nameValuePairs));
writer.close();
os.close();
conn.connect();
StringBuffer response=null;
try{
Log.d("time","Time Stamp bfr InputStream "+new Timestamp(date.getTime()));
InputStream is = conn.getInputStream();
date= new java.util.Date();
Log.d("time","Time Stamp aftr InputStream "+new Timestamp(date.getTime()));
BufferedReader rd = new BufferedReader(new InputStreamReader(is));
String line;
response = new StringBuffer();
while((line = rd.readLine()) != null) {
response.append(line);
response.append('\r');
}
rd.close();
response.toString();
result=response.toString();
} catch (Exception e) {
}
Run Code Online (Sandbox Code Playgroud)
为了检查服务在哪里花费时间,我将日志条目打印到TimeStamp。
该过程的平均时间如下:
平均发布到服务器的时间少于200万秒
创建输入流的平均时间将近5秒写入响应的平均时间少于200万秒。
是否知道为什么输入流会花费很多时间,从而使整个服务非常慢?
将 urlConnection.setConnectTimeout() 设置为较低的超时。
URLConnection.setConnectTimeout() 的类文档说:
设置连接时等待的最长时间(以毫秒为单位)。如果在建立连接之前超时,则连接到服务器将失败并抛出 SocketTimeoutException。默认值 0 使我们执行阻塞连接。这并不意味着我们永远不会超时,但它可能意味着几分钟后您将遇到 TCP 超时。
警告:如果主机名解析为多个 IP 地址,则此客户端将按照 RFC 3484 顺序尝试每个 IP 地址。如果连接到这些地址中的每一个都失败,则在连接尝试引发异常之前将经过多次超时。同时支持 IPv6 和 IPv4 的主机名始终至少有 2 个 IP 地址。
我最初设置为urlConnection.setConnectTimeout(30000);,然后将其更改为urlConnection.setConnectTimeout(1000)。我立即看到了更快的结果。
希望这可以帮助!
| 归档时间: |
|
| 查看次数: |
7400 次 |
| 最近记录: |