完成所有线程后如何解除ProgressDialog?

时间:2012-04-01 14:48:15

标签: android multithreading android-asynctask progressdialog

我有30个线程(AsyncTask)同时执行。在执行它们之前,我将显示progressdialog。线程完成执行后,我将解除progressdialog。

关于如何在完成所有线程后解除ProgressDialog的任何建议?

3 个答案:

答案 0 :(得分:1)

如果您使用精确的30个线程,则使用30初始化变量,并在每个任务完成后将计数减1,并检查变量是否为零。如果它为零则表示所有任务都已完成。所以你可以解雇ProgressDialog。

答案 1 :(得分:1)

执行此操作的最佳方法是使用AsyncTask()执行您的工作并关闭其onPOstExecute()中的对话框。这将确保任务已完成并且ProgressDialog已完成。如果您仍想继续使用Threads,则需要填充自定义侦听器,该侦听器在线程完成时触发,并且您可以维护计数器已触发的次数。我可以给你一个代码,更好的例子是在这个链接:How to know if other threads have finished?

答案 2 :(得分:1)

您可以使用全局类:

public abstract class Global{

 private static int counter = 30;
 private static ProgressDialog pd;
 private static Activity a;

 public static synchronized void updateCounter(){


 counter--;

 if(counter<=0){

    a.runOnUiThread(new Runnable() {

    @Override
    public void run() {

        pd.dismiss();
    }
   });

  }

 }

}

由于线程的并发访问,您需要使用“synchronized”。

在您的主要活动中启动ProgressDialog并初始化变量:

Global.a = this;
Global.pd = ProgressDialog.show(this, "Tittle","Message ...", true);

然后启动线程。

在每个帖子的末尾,您可以调用Global.updateCounter();