2013-11-10 54 views
0

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

当服务器启动并运行时,所有情况都很好。当我故意关闭服务器并单击活动A中的按钮时,我不确定控件的位置。我期待一个connectiontimeout异常,我正在接受它。但有时,Activity B异常中的异步任务首先发生,而有时Activity A异常中的异步任务首先发生。

在两个异步方法catch块,有这

例外(以两者的异步方法)后,一旦开始anotheractivity(无服务器连接活动)意图已发生,我没有看到任何登录Logcat。我相信这个应用程序会陷入瘫痪。我希望优雅地通知其他正在运行的异步任务来停止。

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

+0

我不确定我是否正确说明了我的问题。我在这里要说的是,通过读取活动A中的一个asynctask的状态,如果活动A中的asynctask遇到连接超时异常,则活动B中的另一个asynctask应该停止执行。我是否需要引用活动B中活动A的异步任务实例?如果是,任何人都可以帮助我获取代码示例。谢谢你的帮助。 –

回答

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静态和可以取消他们超时

+0

谢谢。我将执行此操作并让您知道结果 –

+0

这已实施。上面重申了我的问题 –

0

你应该阅读的权利“是的AsyncTask真正概念上有缺陷的第一个“相关”的帖子还是我只是遗漏了什么?”。

你试图做你正在做的事情,对Android操作系统如何管理活动和他们的AsyncTasks没有多少理解。尝试从活动A启动一个,然后在完成之前启动活动B注定会失败。