【发布时间】:2011-06-22 17:58:38
【问题描述】:
我有一个使用 HttpClient 处理相当长的下载的 AsyncTask。如果用户完成启动它的活动,我想停止执行此请求。我怎样才能做到这一点?
所以我启动了AsyncTask,HttpClient在execute()中,处理一个GET请求,有没有办法终止这个?
【问题讨论】:
-
你试过关闭流吗?
标签: android httpclient android-asynctask
我有一个使用 HttpClient 处理相当长的下载的 AsyncTask。如果用户完成启动它的活动,我想停止执行此请求。我怎样才能做到这一点?
所以我启动了AsyncTask,HttpClient在execute()中,处理一个GET请求,有没有办法终止这个?
【问题讨论】:
标签: android httpclient android-asynctask
AsyncTask#cancel放弃挂起的任务HttpUriRequest#abort()中止http请求1.4。中止请求
在某些情况下,由于目标服务器上的高负载或客户端发出的并发请求过多,HTTP 请求执行无法在预期的时间范围内完成。在这种情况下,可能需要提前终止请求并解除阻塞在 I/O 操作中阻塞的执行线程。 HttpClient 正在执行的 HTTP 请求可以通过调用 HttpUriRequest#abort() 方法在执行的任何阶段中止。此方法是线程安全的,可以从任何线程调用。当一个 HTTP 请求被中止时,它的执行线程——即使当前在一个 I/O 操作中被阻塞——通过抛出一个 InterruptedIOException 来保证解除阻塞
【讨论】:
异步任务有一个可以覆盖的取消调用。您可以从那里访问您的 HttpClient 并关闭流。
【讨论】:
HttpClient.Execute 阻止呼叫。 OnCancelled 在 HttpClient 释放锁之前不会被调用。