Android 如何取消从异步任务调用的HTTP GET请求?

Android 如何取消从异步任务调用的HTTP GET请求?,android,http,android-asynctask,Android,Http,Android Asynctask,我使用静态web服务类来调用HTTP GET请求,并希望在用户按下后退按钮时能够取消请求/异步任务 我会定期在doInBackground中检查isCancelled(),这适用于所有其他操作,但如果HTTP请求是在用户回击时发生的,则在收到结果或任务超时之前,任务不会被取消 由于对WebServices.getDeviceId()的静态调用,我在HTTP客户端上没有句柄,因此无法使用httpclient.getConnectionManager().shutdown();停止连接。有人对我如何

我使用静态web服务类来调用HTTP GET请求,并希望在用户按下后退按钮时能够取消请求/异步任务

我会定期在doInBackground中检查isCancelled(),这适用于所有其他操作,但如果HTTP请求是在用户回击时发生的,则在收到结果或任务超时之前,任务不会被取消

由于对WebServices.getDeviceId()的静态调用,我在HTTP客户端上没有句柄,因此无法使用httpclient.getConnectionManager().shutdown();停止连接。有人对我如何解决这个问题有什么想法吗

@Override
    protected Void doInBackground(Void... params) {
        if((mInstance.getDeviceId() == null) && !isCancelled()) {
            String deviceId = WebServices.getDeviceId();
        }

        return null;
    }
这是来自SDK的:

 Cancelling a task

A task can be cancelled at any time by invoking cancel(boolean). 
Invoking this method will cause subsequent calls to isCancelled() 
to return true. 
After invoking this method, onCancelled(Object), instead of 
onPostExecute(Object) will be invoked after doInBackground(Object[]) returns. 
To ensure that a task is cancelled as quickly as possible, 
you should always check the return value of isCancelled() periodically from 
doInBackground(Object[]), if possible (inside a loop for instance.)
然后

if (isCancelled()) 
     break;
else
{
   // do your work here
}

答案是否为so

如果要中断http请求,需要对其进行引用并调用
yourHttpRequest.abort()

在WebServices类中,您不能添加一个类似于
abortHttpRequest()
的方法,并添加对当前HttpRequest的引用吗


您可能需要管理http请求队列并中止正确的请求。

是的,我已经这样做了,以取消异步任务,但是如果在http请求运行时调用了cancel,在请求完成或超时之前,任务不会被取消取消取消任务不会中断http请求可以执行httpclient.getConnectionManager().shutdown();在onCancelled()中,我考虑过这一点,但由于方法是静态访问的,我如何知道哪个HttpRequest是当前的?如果这样做,则需要管理一个HttpRequest队列。您可能不再需要AsyncTasks,您将拥有对排队请求的引用。您编写
我定期检查isCancelled()
,但我认为您错了:您只检查了一次
isCancelled()
,在
doInBackground()
的开始处。现在这是在doInBackground中完成的唯一一件事,所以我只检查了一次,因为没有循环或任何东西,我不能在实际的HTTP过程中检查它。是的,你是对的,我只是想“定期”检查你的意思,因为没有循环。