1

我正在尝试处理用户在 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);
4

2 回答 2

0

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

于 2013-07-10T14:46:43.043 回答
0

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

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

于 2013-07-10T16:19:10.927 回答