有没有办法阻止在AsyncTask中执行HttpClient?
我有一个AsyncTask处理一个相当长的下载,使用HttpClient。如果用户完成启动它的活动,我想停止执行此请求。我怎样才能做到这一点?有没有办法阻止在AsyncTask中执行HttpClient?
所以我开始了AsyncTask,HttpClient在execute()中,处理GET请求,有没有办法终止这个?
异步任务有一个可以覆盖的取消调用。你可以从那里得到你的HttpClient并关闭流。
如何?我可以到我的http客户端,但没有这样的方法:/ – feresr
它不会工作。 'HttpClient.Execute'阻止呼叫。 'OnCancelled'不会被调用,直到HttpClient释放锁。 – xmen
没错,这实际上不会中断请求,你需要按照下面的答案使用abort()。 – chrisdowney
- 呼叫
AsyncTask#cancel
丢弃未决任务根据HttpClient docs - ,使用
HttpUriRequest#abort()
中止http请求
1.4。正在中止请求
在某些情况下,由于目标服务器负载过高或客户端发出的并发请求过多,HTTP请求执行无法在预期时间范围内完成。在这种情况下,可能需要提前终止请求并解除阻塞在I/O操作中的执行线程。通过调用HttpUriRequest#abort()方法,HttpClient执行的HTTP请求可以在任何执行阶段中止。此方法是线程安全的,可以从任何线程调用。当一个HTTP请求中止时,它的执行线程 - 即使当前在I/O操作中被阻塞 - 通过抛出InterruptedIOException保证解除阻塞
您是否试图关闭流? – mibollma