我有30个线程(AsyncTask)同时执行。在执行它们之前,我将显示progressdialog。线程完成执行后,我将解除progressdialog。
关于如何在完成所有线程后解除ProgressDialog的任何建议?
答案 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();