有没有办法阻止在AsyncTask中执行HttpClient?

问题描述:

我有一个AsyncTask处理一个相当长的下载,使用HttpClient。如果用户完成启动它的活动,我想停止执行此请求。我怎样才能做到这一点?有没有办法阻止在AsyncTask中执行HttpClient?

所以我开始了AsyncTask,HttpClient在execute()中,处理GET请求,有没有办法终止这个?

+0

您是否试图关闭流? – mibollma

异步任务有一个可以覆盖的取消调用。你可以从那里得到你的HttpClient并关闭流。

+0

如何?我可以到我的http客户端,但没有这样的方法:/ – feresr

+2

它不会工作。 'HttpClient.Execute'阻止呼叫。 'OnCancelled'不会被调用,直到HttpClient释放锁。 – xmen

+0

没错,这实际上不会中断请求,你需要按照下面的答案使用abort()。 – chrisdowney

  1. 呼叫AsyncTask#cancel丢弃未决任务根据HttpClient docs
  2. ,使用HttpUriRequest#abort()中止http请求

1.4。正在中止请求

在某些情况下,由于目标服务器负载过高或客户端发出的并发请求过多,HTTP请求执行无法在预期时间范围内完成。在这种情况下,可能需要提前终止请求并解除阻塞在I/O操作中的执行线程。通过调用HttpUriRequest#abort()方法,HttpClient执行的HTTP请求可以在任何执行阶段中止。此方法是线程安全的,可以从任何线程调用。当一个HTTP请求中止时,它的执行线程 - 即使当前在I/O操作中被阻塞 - 通过抛出InterruptedIOException保证解除阻塞