【问题标题】:Cancelled AsyncTask hangs new HttpRequests取消的 AsyncTask 处理新的 Http 请求
【发布时间】:2011-02-02 21:58:04
【问题描述】:

我遇到了异步任务和 http 请求的问题。

用户可以按下两个不同的按钮。这两个按钮都从 Web 服务器下载信息。我希望请求可以取消。在每次调用之前都会显示一个进度对话框。

http 请求在 asynctask 中执行,并且我在 progressdialog 上有一个 OnDismiss 侦听器,如果按下返回则取消 asynctask。

它的工作原理是 50/50。

如果我执行 http 请求,取消 asynctask,然后执行新请求,它可能会工作,但也可能导致 http 请求无限挂起。

这一行是它挂起的地方:

response = httpclient.execute(urlConnection, context);

有没有其他方法可以进行可取消的通话,或者我可以做些什么来避免挂起?

【问题讨论】:

标签: android httprequest android-asynctask


【解决方案1】:

我写了一个AsyncTask 来通过http 执行一些下载,我发现在任务上调用cancel() 实际上并没有阻止任务执行。 “取消”的任务将继续执行其后台操作。调用cancel() 似乎只是调用onCancelled(),然后AsyncTask 在完成后调用onPostExecute()。也许您的第一个任务仍然拥有下一个任务所需的一些网络资源?

【讨论】:

  • 谢谢!这使我朝着正确的方向前进。我从没想过onCancelled()。所以我尝试关闭onCancelled()中的connectionmanager并再次直接重新启动它,它就可以工作了。也许不是最好的解决方案,但它确实有效。
【解决方案2】:

尝试调用

httpclient.getConnectionManager().shutdown();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-10-27
    • 1970-01-01
    • 2016-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多