Android URL.openStream медленно?

#android

#Android

Вопрос:

Я использую следующий код для извлечения некоторого текста с http-сервера. Размер составляет менее 1 КБ и генерируется за 0,002 миллисекунды

Однако восстановление данных может занять 600 мс, но в основном от 2000 до 5000 мс.

используется следующий код:

 long starttime = System.currentTimeMillis();
      StringBuffer SB = new StringBuffer();
      Common.toLog("101 took "  (System.currentTimeMillis() - starttime)   " ms");
      try {
          URL url = new URL(Common.server request);
          Common.toLog("102 took "  (System.currentTimeMillis() - starttime)   " ms");
          InputStreamReader ISR = new InputStreamReader(url.openStream());
          Common.toLog("102a took "  (System.currentTimeMillis() - starttime)   " ms");
          BufferedReader in = new BufferedReader(ISR);
          Common.toLog("103 took "  (System.currentTimeMillis() - starttime)   " ms");
          String inputLine;
          while ((inputLine = in.readLine()) != null) {
              SB.append(inputLine);
          }

          in.close();
          Common.toLog("105 took "  (System.currentTimeMillis() - starttime)   " ms");
      } catch (IOException e)
      {
          Common.toLog("Could not make connection 1");
          showMSG(R.string.ERROR_NO_INTERNET, true);
      }
  

Наиболее трудоемкий метод находится между точкой регистрации 102 и точкой 102a. При использовании Chrome я могу загрузить страницу в течение 300-350 мс. Я хотел бы знать, есть ли более эффективный способ извлечения этих данных

Ответ №1:

Данные, которые вы извлекаете, на самом деле не такие длинные. Вместо того, чтобы открывать поток чтения по URL, попробуйте использовать одну из реализаций HttpRequest:

http://developer.android.com/reference/org/apache/http/HttpRequest.html

Таким образом, выполняется один запрос, и ваши данные возвращаются в ответе. Например, вы могли бы попробовать запрос HttpGet:

 HttpGet httpGet = new HttpGet(url);
HttpClient httpclient = new DefaultHttpClient();
// Execute HTTP Get Request
HttpResponse response = httpclient.execute(httpGet);
content = response.getEntity().getContent();
  

Комментарии:

1. Это лучше, чем раньше, используя следующий скрипт: androidforums.com/application-development/… Однако: время ответа на первый запрос по-прежнему занимает 1600 мс, по сравнению с /- 700 секундами для следующего запроса