2011-06-22 8 views
5

Tengo una AsyncTask que maneja una descarga bastante larga, usando HttpClient. Me gustaría detener la ejecución de esta solicitud si el usuario finaliza la Actividad que la inicia. ¿Cómo puedo conseguir esto?¿Hay alguna manera de detener la ejecución de HttpClient en AsyncTask?

Así que inicié AsyncTask, HttpClient está en execute(), procesando una solicitud GET, ¿hay alguna manera de terminar esto?

+0

¿Ha intentado cerrar la secuencia? – mibollma

Respuesta

4

La tarea asincrónica tiene una llamada de cancelación que puede anular. Puede acceder a su HttpClient desde allí y cerrar la transmisión.

+0

¿Cómo ?. Puedo acceder a mi cliente http, pero no existe ese método:/ – feresr

+2

No funcionará. 'HttpClient.Execute' bloquea la llamada. 'OnCancelled' no se llamará hasta que HttpClient libere el bloqueo. – xmen

+0

Correcto, esto no funciona para interrumpir realmente la solicitud, debe usar abort() según la respuesta a continuación. – chrisdowney

5
  1. llamada AsyncTask#cancel para descartar tarea pendiente
  2. acuerdo con HttpClient docs, utilice HttpUriRequest#abort() abortar petición http

1,4. Cancelación de solicitudes

En algunas situaciones, la ejecución de solicitudes HTTP no se completa dentro del marco de tiempo esperado debido a la alta carga en el servidor de destino o demasiadas solicitudes simultáneas emitidas en el lado del cliente. En tales casos, puede ser necesario finalizar la solicitud prematuramente y desbloquear el hilo de ejecución bloqueado en una operación de E/S. Las solicitudes HTTP ejecutadas por HttpClient pueden anularse en cualquier etapa de ejecución invocando el método HttpUriRequest # abort(). Este método es seguro para subprocesos y se puede invocar desde cualquier subproceso. Cuando se cancela una solicitud HTTP, se garantiza que su cadena de ejecución, incluso si está bloqueada en una operación de E/S, se desbloquea lanzando una InterruptedIOException

Cuestiones relacionadas