【问题标题】:Is there a way to stop a HttpClient's execution in an AsyncTask?有没有办法在 AsyncTask 中停止 HttpClient 的执行?
【发布时间】:2011-06-22 17:58:38
【问题描述】:

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

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

【问题讨论】:

  • 你试过关闭流吗?

标签: android httpclient android-asynctask


【解决方案1】:
  1. 调用AsyncTask#cancel放弃挂起的任务
  2. 根据HttpClient docs,使用HttpUriRequest#abort()中止http请求

1.4。中止请求

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 怎么样?我可以访问我的 http 客户端,但没有这样的方法:/
    • 它不会工作。 HttpClient.Execute 阻止呼叫。 OnCancelled 在 HttpClient 释放锁之前不会被调用。
    • 对,这并不能真正中断请求,您需要按照下面的答案使用 abort()。
    猜你喜欢
    • 2021-01-14
    • 1970-01-01
    • 1970-01-01
    • 2019-03-24
    • 2019-10-20
    • 2013-12-25
    • 1970-01-01
    • 2013-05-01
    • 2021-09-11
    相关资源
    最近更新 更多