2012-03-05 3 views
3

После обновления до Android 2.3.5 и 2.3.6, код для андроид HttpURLConnection класса: urlconn.connect(), urlconn.getOutputStream() и urlconn.getInputStream () становится очень медленным (каждая команда принимает более 5 секунд, в версии 2.3.2 или 2.2 она занимает меньше 1 сек). Есть ли у кого-то такая же ситуация?HttpURLConnection на андроид 2.3.5 и 2.3.6

Мои коды выглядит следующим образом:

getUrl = new URL(url); 
urlConn = (HttpURLConnection) getUrl.openConnection(); 

urlConn.setUseCaches(false); 
urlConn.setRequestMethod(httpMethod.name()); 
urlConn.setConnectTimeout(HTTP_CONNECT_TIMEOUT); 
urlConn.setReadTimeout(HTTP_READ_TIMEOUT); 
urlConn.setDoInput(true); 
if (requestBody != null) 
     urlConn.setFixedLengthStreamingMode(requestBody.length()); 
if (!(httpMethod == HttpMethod.GET)) 
     urlConn.setDoOutput(true); 

urlConn.connect(); 

if (requestBody != null) { 
     osw = new OutputStreamWriter(urlConn.getOutputStream()); 
     osw.write(requestBody); 
     osw.flush(); 
} 

in = urlConn.getInputStream(); 
buffer = new ByteArrayOutputStream(); 
int nRead; 
byte[] data = new byte[256]; 
while ((nRead = in.read(data, 0, data.length)) != -1) { 
     buffer.write(data, 0, nRead); 
} 
buffer.flush(); 
responseBody = buffer.toByteArray(); 
responseCode = urlConn.getResponseCode(); 

С уважением, Чжэн

+1

Это обычно связано с разрешением имени, проверьте настройки DNS и/или серверы. –

+0

Я борюсь с подобной проблемой за последние несколько дней. Пожалуйста, дайте мне знать, если найдете решение. Благодаря ! – gauravsapiens

ответ

0

Два бита советы:

  1. заявления Вставьте лесозаготовительных после каждой операции HTTP. Таким образом, вы можете видеть, какой шаг занимает больше всего времени.
  2. Чтение 256 байтов за один раз из InputStream будет довольно неэффективным. По моему опыту, размер буфера 8k (8192) лучше всего работает на большинстве устройств и сетей.
Смежные вопросы