Тайм-аут сокета при выполнении запросов HTTPGet с использованием DefaultHTTPClient

Каковы преимущества и недостатки повторного использования DefaultHTTPClient при отправке HTTP-запросов из приложения Android на внешний сервер? Я пытался использовать повторное использование DefaultHTTPClient при выполнении периодических запросов HTTPGet, но я получаю случайные тайм-ауты сокетов (особенно при использовании 3G).

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

public class MyHTTPSender {
  private DefaultHTTPClient mClient;

  public MyHTTPSender() {
    mClient = new DefaultHTTPClient();
  }

  public void send(String httpAddress) {
HttpGet get = new HttpGet(this.surrogateURL);
    HttpResponse response = null;
try {
      response = httpClient.execute(get);
      // ... consume entity if OK          
    } catch (Exception e) {
    } finally {
        if (response != null) {
           // do some sanity checks to ensure Entity is there!
           response.getEntity().consumeContent();
        }
    }
  }
}

Я не вижу ничего плохого в том, что делаю. У меня есть отдельный обработчик, который делает HTTPPost-запросы, и это работает отлично (использует другой объект DefaultHTTPClient).

Любые предложения?

Ответ 1

На каком уровне API вы работаете?

Если вы находитесь на 8 или выше, вы можете попробовать попробовать AndroidHttpClient, которые могут иметь лучшие тайм-ауты сокета.

В противном случае вы можете проверить, как вы создаете DefaultHttpClient, и попробуйте указать более длительные таймауты.