0

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

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

ответ

1

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

+0

один нужно будет запустить цикл постоянно проверять счетчик, который будет блокировать поток пользовательского интерфейса и не рекомендуется. – Akhil

+1

Нет, просто напишите в onPostexecute() вашей задачи async. поэтому он будет проверять только 30 раз. то есть один раз для каждой асинхронной задачи – Ishu

+0

также я думаю, что переменная должна делиться между всеми потоками? – thalsharif

1

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

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

    } 

} 

} 

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

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

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

, а затем начать темы.

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

+0

хорошее решение. Благодарю. – thalsharif