使用并行多个异步任务处理单个progressdialog

时间:2012-05-11 06:39:20

标签: android android-asynctask progressdialog

在我的项目中,我想在加载页面的同时从3个不同的URL(webservice)并行加载数据。

为此我使用3个不同的asynctask来加载数据。

我希望在第一次asynctask启动时将进度对话框消息显示为“loading”,并在最后一次asynctask完成后显示关闭对话框(直到完成3个任务显示进度对话框)。

请告诉我处理这种情况的方法。

3 个答案:

答案 0 :(得分:4)

有不同的方法来处理这种情况。

  1. 您可以使用使用任务数初始化的计数器变量,当AsyncTask完成时,此计数器会递减。当计数器为0时,ProgressDialog被取消。你可以在每个AysncTask的{​​{1}} onPostExecute中执行此减量并检查进度对话框被解雇。

  2. 您可能不需要3个不同的AsyncTask。您可以使用单AsyncTask CountDownLatch进行Thread同步。

答案 1 :(得分:1)

您可以使用的一种方法是创建一个界面OnThreadFinishListener(使用onThreadFinish()方法)并让您的活动实现它。您的所有AsyncTask都应该将自己注册到侦听器,因此每次线程完成时都会调用onThreadFinish方法。在onThreadFinish方法中,它应该检查是否还有一个在后台运行的线程(类似if (asyncTask1.getStatus() == AsyncTask.Status.RUNNING || asyncTask2.getStatus() == AsyncTask.Status.RUNNING ... )

如果一切都是假的,那么你可以解雇progress dialog

答案 2 :(得分:0)

您可以按照以下方式执行此操作:

//define progress dialog object globally in your parent class
ProgressDialog pd = null;

AsyncTask1 onPreExecute

pd = ProgressDialog.show(this, "title", "loading", true);

<强> AsyncTask2

//do nothing

AsyncTask3 onPostExecute

if(pd!=null)
    pd.dismiss();