取消AsyncTask中的网络调用

时间:2013-07-10 14:42:57

标签: android

我正在尝试处理用户在AsyncTask中的Http请求期间丢失数据连接的情况。目前AsyncTask永远不会完成执行,如果这发生,应用程序只是停止。我甚至无法检查isCancelled(),因为Http请求只是在一个函数调用上停止,所以我无法实现循环或任何东西。

我在UI线程中使用以下内容,但我无法弄清楚如何检查任务是否已从任务中取消:

    task = new LoginTask();
    task.execute(this, mUsername, mPassword);
    Handler handler = new Handler();
    handler.postDelayed(new Runnable()
    {
        @Override 
        public void run()
        {
            if (task != null && task.getStatus() == AsyncTask.Status.RUNNING)
            {
                task.cancel(true);
            }
        }
    }, 5000);

2 个答案:

答案 0 :(得分:0)

为了停止处理,你需要在doInBackground()中检查isCancelled()。如果在doInBackground中有任何合理的位置,可以添加if语句。否则,您应该考虑在http连接上设置超时。

答案 1 :(得分:0)

由于KSoap 2是用Java编写的,因此您可以选择抽象其中一个类并在HttpConnection上手动设置超时。

根据我们之前的讨论,您可能必须覆盖不在连接上设置超时的方法,并将其替换为您自己的方法和超时的连接。由于KSoap是open source,应该是可管理的!祝你好运。