2010-04-17 3 views
0

Я просто хочу проверить, хорошо ли я понял, как работает асинхронный запрос Http на Android. Предположим, что я сделал такой запрос и установил ResponseHandler<String> responseHandler для обработки ответа. Делая это, возможно ли заблокировать поток пользовательского интерфейса, ожидающий ответа? Смысл в том, что код в функции:вопрос об асинхронном http

public String handleResponse(HttpResponse response) 

также выполняется в потоке пользовательского интерфейса или молча породил поток, который ждет ответа и вызывает функцию handleResponse (HttpResponse ответ), когда приходит ответ?

ответ

0

Делая это возможность иметь нить UI заблокирован в ожидании ответа?

Вызов execute() с или без ResponseHandler будет блокировать этот поток до запроса HTTP не был обработан. Если вы вызываете execute() в основной поток приложений, вы заблокируете пользовательский интерфейс. Это нехорошо - используйте AsyncTask в execute() в отдельном потоке, а затем воспользуйтесь своей реализацией onPostExecute(), чтобы обновить интерфейс пользователя с помощью результатов запроса.

+0

Не могли бы вы предоставить дополнительную информацию о функции onPostExecute()? –

+0

Когда вы реализуете 'AsyncTask', вы можете переопределить' onPostExecute() '. Это называется основным потоком приложения, после завершения фоновой работы из 'doInBackground()'. Вот пример проекта из одной из моих книг, которая показывает использование HttpClient с помощью 'AsyncTask': http://github.com/commonsguy/cw-android/tree/master/Service/WeatherPlus/ – CommonsWare

Смежные вопросы