2011-02-02 90 views
2

我遇到了asynctasks和http请求的问题。已取消AsyncTask挂起新的HttpRequests

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

http请求是在一个asynctask中执行的,并且我在进度对话框上有一个OnDismiss侦听器,如果按下了back,它将取消asynctask。

它工作50/50。

如果我做了http请求,取消了asynctask,然后做了一个新的请求,它可能会起作用,但也可能导致http请求挂起无限。

这条线是它挂起:

response = httpclient.execute(urlConnection, context);

是否有任何其他的方式做一个电话是取消还是有什么我可以做,以避免挂?

+0

这里是一个关于如何取消的AsyncTask http://www.quicktips.in/correct-way-to-cancel-an-asynctask-in-android/ – 2016-06-29 17:12:12

回答

1

我写了一个AsyncTask来通过http执行一些下载,并且我发现在任务上调用cancel()实际上并不会停止任务的执行。 “取消”任务将继续执行其后台操作。拨打电话cancel()只是拨打电话onCancelled(),然后AsyncTask拨打拨打电话onPostExecute()。也许你的第一个任务仍然拥有一些下一个任务需要的网络资源?

+0

感谢为例!这使我朝着正确的方向前进。我从来没有想过`onCancelled()`。所以我试图关闭`onCancelled()`中的连接管理器,然后再次直接重新启动它,并使其工作。也许不是最好的解决方案,但它的工作原理。 – Magnus 2011-02-02 22:59:25

1

尝试调用

httpclient.getConnectionManager().shutdown();