我开发了一个移动应用程序,其中单击活动A中的按钮会触发活动B以及异步任务。在Activity B中,有一个异步任务在oncreate方法中被触发。因此,将有2个异步任务将并行运行。异步任务都与服务器交互。 (分别为POST和GET方法)
服务器启动并运行时,一切都很好。当我故意让服务器关闭并点击活动A中的按钮时,我不确定控件的去向。我期待一个connectiontimeout异常,我得到它。但有时活动B异常中的异步任务首先发生,有时活动A异常中的异步任务首先发生。
在异步方法的catch块中,有一个intent会启动一个异常(没有服务器连接活动)
一旦异常(在两个异步方法中)发生后,我没有在Logcat中看到任何日志。我相信应用程序停滞不前。我希望优雅地通知正在运行的其他异步任务。
有人可以帮我完成这项任务。有没有好的设计方法来处理这个问题?让我知道并感谢您的时间和精力。
答案 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注定要失败。