我的应用程序中有多个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()上被驳回。
我的问题是我想一次只执行一项任务。 在我的代码中,所有任务都是同时启动的,进度对话框将相互重叠。所以有办法一次只执行一个任务, 谢谢你的到来。
答案 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
,即它不是串行调用的。因此,进度对话框同时出现。
我认为您可以在主活动中仅使用一个进度对话框修改代码,并按状态显示或隐藏对话框。