Android - 两个并行运行的AsyncTask - 异常

时间:2013-11-10 06:48:27

标签: android android-asynctask

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

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

在异步方法的catch块中,有一个intent会启动一个异常(没有服务器连接活动)

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

有人可以帮我完成这项任务。有没有好的设计方法来处理这个问题?让我知道并感谢您的时间和精力。

2 个答案:

答案 0 :(得分: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的一个实例,请考虑将其声明为静态或让它遵循Singleton模式。取消一项任务后,只需取消另一项任务。

修改

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

答案 1 :(得分:0)

你应该阅读右边的第一篇“相关”帖子“AsyncTask是否真的在概念上存在缺陷,或者我只是遗漏了什么?”。

您尝试做您正在做的事情,几乎不了解Android操作系统如何管理活动及其AsyncTasks。尝试从活动A开始,然后在活动结束之前启动活动B注定要失败。