满足条件时,一个接一个地运行多个Asynctask

时间:2015-07-27 07:27:38

标签: android android-asynctask

我的应用程序中有多个asynctasks,我想在满足特定条件时执行它。例如,

类Task1扩展了AsyncTask ...

类Task2扩展了AsyncTask ..

类Task3扩展了AsyncTask ...

我有一个while循环,用于迭代地图中的某些值。 例如:

while(iterator.next())

{

 Map.Entry pair = (Map.Entry) it.next();

            String title = pair.getKey().toString();

if(title.equals("one"))

{

//execute task1;

}else if(title.equals("two"))

{

//execute task2;

}

etc..
}

这是我目前使用的示例代码。 每个任务都包含一个进度对话框,它从onPreExcecute()开始 在onPostExecute()上被驳回。

我的问题是我想一次只执行一项任务。 在我的代码中,所有任务都是同时启动的,进度对话框将相互重叠。所以有办法一次只执行一个任务, 谢谢你的到来。

3 个答案:

答案 0 :(得分:1)

这里的问题是while循环。即使任务在后台运行,循环也将继续运行。因此,您必须修改代码,使得只有在完成一个任务时才会触发循环条件。

要处理进度条问题,请创建一个可由所有asyncTasks共享的全局进度条对象。

请参阅以下链接以查看AsynTasks的状态。 AsynTask Status

答案 1 :(得分:0)

重叠progressDialog的主要原因是运行multipple asnyntask。 所以你先启动asyntask,然后调用next postcececutive。

答案 2 :(得分:0)

你对AsyncTask有误解。 AsyncTask的默认执行程序是一个串行执行程序,这意味着它将在特定进程中以串行顺序一次执行一个任务。但为什么一次显示过程对话框?阅读AsyncTask的代码后,您可以在函数executeOnExecutor中找到原因:

public final AsyncTask<Params, Progress, Result> executeOnExecutor(Executor exec,
            Params... params) {
    mStatus = Status.RUNNING;
    onPreExecute();
    mWorker.mParams = params;
    exec.execute(mFuture);
    return this;
}

您可以发现在执行之前调用方法onPreExecute,即它不是串行调用的。因此,进度对话框同时出现。

我认为您可以在主活动中仅使用一个进度对话框修改代码,并按状态显示或隐藏对话框。