2010-04-17 6 views
0

Je veux juste vérifier si j'ai bien compris la façon asynchrone demande Http sur Android. Supposons que je fasse une telle requête et que je mette un ResponseHandler<String> responseHandler pour gérer la réponse. En faisant cela, est-il possible que le thread de l'interface utilisateur soit bloqué en attente de la réponse? L'implication étant que le code dans la fonction:question à propos de http asynchrone

public String handleResponse(HttpResponse response) 

est également exécutée sur le thread d'interface utilisateur ou est-il engendré silencieusement un thread qui attend la réponse et appelle la fonction handleResponse (réponse HttpResponse) lorsque la réponse arrive?

Répondre

0

En faisant cela, est-il possible d'avoir le thread d'interface utilisateur bloqué en attente de la réponse ?

Appel execute() avec ou sans ResponseHandler bloque ce fil jusqu'à ce que la requête HTTP a été traitée. Si vous appelez execute() sur le thread d'application principale, vous allez bloquer l'interface utilisateur. Ce n'est pas une bonne chose - utilisez AsyncTask à execute() sur un thread séparé, puis utilisez votre implémentation onPostExecute() pour mettre à jour votre interface utilisateur avec les résultats de la demande.

+0

Pourriez-vous fournir plus d'informations sur la fonction "onPostExecute()"? –

+0

Lorsque vous implémentez une 'AsyncTask', vous pouvez remplacer' onPostExecute() '. Ceci est appelé sur le thread d'application principal, après que le travail d'arrière-plan de 'doInBackground()' est terminé. Voici un exemple de projet d'un de mes livres qui montre l'utilisation de HttpClient avec 'AsyncTask': http://github.com/commonsguy/cw-android/tree/master/Service/WeatherPlus/ – CommonsWare