0

我开发了一个移动应用程序,单击 Activity A 中的按钮会触发 Activity B 以及异步任务。在活动 B 中,有一个异步任务在 oncreate 方法中被触发。因此,将有 2 个异步任务并行运行。两个异步任务都与服务器交互。(分别是 POST 和 GET 方法)

当服务器启动并运行时,一切都很好。当我故意关闭服务器并单击 Activity A 中的按钮时,我不确定控件的去向。我期待一个连接超时异常,我得到了它。但有时Activity B异常中的异步任务先发生,有时Activity A异常中的异步任务先发生。

在两个异步方法的 catch 块中,都有一个启动另一个活动的意图(无服务器连接活动)

一旦发生异常(在两种异步方法中),我在 Logcat 中看不到任何日志。我相信该应用程序会停滞不前。我希望优雅地通知另一个正在运行的异步任务停止。

谁能帮我完成这项任务。有什么好的设计方法来处理这个问题吗?让我知道并感谢您的时间和精力。

4

2 回答 2

0

您应该阅读右侧的第一个“相关”帖子“AsyncTask 真的在概念上存在缺陷还是我只是遗漏了什么?”。

您尝试做您正在做的事情,表明您对 Android 操作系统如何管理活动及其 AsyncTasks 知之甚少。试图从 Activity A 启动一个,然后在 Activity B 完成之前启动它注定会失败。

于 2013-11-11T07:03:47.170 回答
0

考虑实施您自己的超时检测和处理。
在触发 ASyncTask 时使用处理程序并提供超时时间

private void readFromServer(String url, int timeout) {
    // read from server
    final ServerHit serverHit = new ServerHit(this);//ServerHit is my asyncTask
    serverHit.execute(url);
    // set a timeout
    Handler handler = new Handler();
    handler.postDelayed(new Runnable() {
        @Override
        public void run() {
            if (serverHit.getStatus() == AsyncTask.Status.RUNNING)
            {
                serverHit.cancel(true);
            }
        }
    }, timeout);
   }

但是,如果您只调用每个 AsyncTask 的一个实例,请考虑将其声明为静态或让它遵循单例模式。在取消一项任务时,只需取消另一项。

编辑

您可以将这些异步任务定义为静态,并可以在超时时取消它们

于 2013-11-10T06:53:58.543 回答