Как уволить ProgressDialog после завершения всех потоков? - PullRequest
0 голосов
/ 01 апреля 2012

У меня одновременно запущено 30 потоков (AsyncTask). Прежде чем выполнять их, я покажу прогрессиалог. После того, как потоки закончат выполнение, я буду отклонять progressdialog.

Любое предложение о том, как закрыть ProgressDialog после завершения всех потоков?

Ответы [ 3 ]

1 голос
/ 01 апреля 2012

Лучший способ сделать это - использовать AsyncTask() для выполнения вашей работы и закрыть диалоговое окно в onPOstExecute(). Это обеспечит выполнение задачи и выполнение ProgressDialog. Если вы все еще хотите продолжать использовать потоки, вам нужно реализовать пользовательский прослушиватель, который запускается всякий раз, когда завершается поток, и вы можете поддерживать счетчик того, сколько раз он был запущен. Я мог бы дать вам код, лучший пример по этой ссылке: Как узнать, закончили ли другие потоки?

1 голос
/ 01 апреля 2012

вы можете использовать глобальный класс:

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();
    }
   });

  }

 }

}

вам нужно использовать «синхронизированный» из-за одновременного доступа к потокам.

И в вашей основной деятельности запустите ProgressDialogи инициализируем переменные:

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

и затем запускаем потоки.

В конце каждого потока вы можете затем вызвать Global.updateCounter();

1 голос
/ 01 апреля 2012

Если вы используете ровно 30 потоков, инициализируйте переменную 30 и после каждого завершения задачи уменьшайте счетчик на единицу, а также проверяйте, равна ли переменная нулю. если он равен нулю, это означает, что все задачи были выполнены. так что вы можете отклонить ProgressDialog.

...