2011-02-02 3 views
2

J'ai un problème avec les requêtes asynctasks et http.Annulé AsyncTask bloque new HttpRequests

L'utilisateur peut appuyer sur deux boutons différents. Les deux boutons téléchargent des informations à partir d'un serveur Web. Je veux que les demandes soient annulables. Avant chaque appel, un dialogue de progression est affiché.

La requête http est exécutée dans une asynctask, et j'ai un écouteur OnDismiss dans le dialogue progressDialog qui annule la tâche asynchrone si back est pressé.

Cela fonctionne 50/50.

Si je fais la requête http, annuler la tâche asynchrone, puis faire une nouvelle requête, cela pourrait fonctionner mais cela pourrait aussi bloquer la requête http.

Cette ligne est où il se bloque:

response = httpclient.execute(urlConnection, context);

est-il une autre façon de faire un appel qui est annulable ou est-ce que je pouvais faire pour éviter le blocage?

+0

est ici un exemple sur la façon d'annuler une AsyncTask http://www.quicktips.in/correct-way-to-cancel-an-asynctask-in-android/ –

Répondre

1

J'ai écrit un AsyncTask pour effectuer des téléchargements sur http, et j'ai trouvé qu'appeler cancel() sur la tâche n'arrête pas réellement l'exécution de la tâche. La tâche "annulée" continuera à effectuer ses actions d'arrière-plan. Appeler cancel() juste semblait appeler onCancelled() et puis le AsyncTaskneonPostExecute() d'appel quand il a fini. Peut-être votre première tâche a-t-elle encore des ressources réseau que la prochaine tâche nécessite?

+0

Merci ! Cela m'a tourné dans la bonne direction. Je n'ai jamais pensé à 'onCancelled()'. J'ai donc essayé de fermer le gestionnaire de connexion dans le 'onCancelled()' et de le redémarrer directement, et ça marche. Peut-être pas la meilleure solution, mais cela fonctionne. – Magnus

1

Essayez d'appeler

httpclient.getConnectionManager().shutdown();