2

我正在使用静态 Web 服务类来调用 HTTP GET 请求,并希望能够在用户按下后退按钮时取消请求/AsyncTask。

我在 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;
    }
4

2 回答 2

7

如果要中断http请求,需要引用它并调用yourHttpRequest.abort()

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

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

于 2013-01-14T14:26:43.537 回答
1

这是来自 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
}

就是答案

于 2013-01-14T14:21:14.637 回答