Обработка тайм-аутов

Обработка тайм-аутов

Настройка одиночного объекта HttpClient в приложении обеспечивает и другие преимущества. Свойства HttpClient можно модифицировать в одном месте, и это окажет влияние на все остальное. Например, если требуется настроить общие значения тайм аутов для HTTP-запросов, это можно сделать при создании объекта HttpClient вызовом соответствующих установочных функций объекта HttpParams. Посмотрите на метод getHttpClient () в е 15.6. Обратите внимание на наличие трех тайм-аутов, с которыми можно работать. Первый из них — это тайм-аут диспетчера подключений, и он определяет, сколько необходимо ожидать факта извлечения соединения из пула, управляемого диспетчером подключений. В примере он устанавливается в 1 секунду. Единственная ситуация, когда может понадобиться ожидать — в случае, если все соединения из пула используются. Второе значение тайм-аута определяет, сколько времени нужно ждать установления сетевого соединения с сервером на другом конце. Для него указано значение 2 секунды. И, наконец, значение тайм-аута сокета устанавливается в 4 секунды — именно столько придется ожидать перед извлечением данных из запроса.

В соответствие с этими тремя тайм-аутами мы можем получить три исключения: ConnectionPoolTimeoutException, ConnectTimeoutException и SocketTimeout Exception. Все они являются подклассами класса IOException, который используется в HttpActivity вместо перехвата каждого подкласса исключения по отдельности.

Внимательно исследовав каждый класс для установки параметров, используемый в getHttpClient(), вы обнаружите дополнительные параметры, которые могут оказаться полезными в той или иной ситуации.

Мы описали, как настроить общий пул соединений HTTP для применения в рамках приложения. Подразумевается, что при каждом использовании соединения будут применяться различные настройки, отражающие специфические потребности. Но что если для отдельного сообщения нужны другие настройки? К счастью, существует простой способ сделать это. Ранее было показано, как использовать объект HttpGet или HttpPost для описания запроса, который должен быть выдан через сеть. Аналогично тому, как устанавливается объект HttpParams в HttpClient, можно установить HttpParams для обоих объектов HttpGet и HttpPost. Настройки, применяемые на уровне сообщения, будут переопределять настройки на уровне HttpClient. В е 15.8 показано, как установить для отдельного запроса тайм-аут сокета в 1 минуту вместо 4 секунд. Эти строки кода должны заменять собой строки в блоке try метода getHttpContent() в е 15.7.

HttpGet request = new HttpGet("http://www.google.com/");

HttpParams params = request.getParams();

HttpConnectionParams.setSoTimeout(params, 60000); // 1 минута request.setParams(params);

String page = httpClient.execute(request,

new BasicResponseHandler());

System.out.println(page);

Использование HttpURLConnection

В Android предлагается еще один способ работы со службами HTTP, при котором используется класс java.net.HttpURLConnection. Это мало чем отличается от рассмотренных выше классов HttpClient, но для достижения цели HttpURLConnection, как правило, требует написания большего числа операторов. С другой стороны, этот класс намного меньше и облегченней, чем HttpClient. Начиная с выпуска Android 4.0, он также и довольно устойчив, поэтому вы должны применять его в приложениях на новых устройствах, когда нужны просто базовые функции HTTP и требуется получить компактное приложение.

Поделиться в соц. сетях

Опубликовать в Google Buzz
Опубликовать в Google Plus
Опубликовать в LiveJournal
Опубликовать в Мой Мир
Опубликовать в Одноклассники
Опубликовать в Яндекс

Добавить комментарий