私は同時に30スレッド(AsyncTask)を実行しています。それらを実行する前に、私はprogressdialogを表示します。スレッドが実行を終了した後、私はprogressdialogを閉じます。すべてのスレッドを終了した後にProgressDialogを終了するにはどうすればいいですか?
すべてのスレッドを終了した後にProgressDialogを解除する方法についての提案はありますか?
私は同時に30スレッド(AsyncTask)を実行しています。それらを実行する前に、私はprogressdialogを表示します。スレッドが実行を終了した後、私はprogressdialogを閉じます。すべてのスレッドを終了した後にProgressDialogを終了するにはどうすればいいですか?
すべてのスレッドを終了した後にProgressDialogを解除する方法についての提案はありますか?
正確な30のスレッドを使用している場合、変数を30で初期化し、すべてのタスク完了後にカウントを1だけ減らし、変数がゼロであるかどうかを確認します。ゼロの場合は、すべてのタスクが完了したことを示します。 ProgressDialogを閉じることができます。
これを行う最も良い方法は、AsyncTask()
を使用して作業を実行し、onPOstExecute()
のダイアログを閉じることです。これにより、タスクが完了し、ProgressDialogが終了することが保証されます。依然としてスレッドを使用し続ける場合は、スレッドが完了するたびに起動されるカスタムリスナーを組み込み、起動された回数のカウンターを維持する必要があります。私はあなたのコードを与えている可能性があり、より良い例は、このリンクである:How to know if other threads have finished?
あなたはグローバルクラスを使用することができます:あなたがあるため、スレッドの同時アクセスの「同期」を使用する必要があります
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();
良い解決策。ありがとう。 – thalsharif
1を呼び出すことができ、各スレッドの終わりに
は、継続的にUIスレッドをブロックし、推奨されませんカウンタをチェックするループのために実行する必要があります。 – Akhil
非同期タスクのonPostexecute()に書き込むだけではありません。 30時間だけチェックします。つまり、すべての非同期タスクに対して1回、 – Ishu
も変数がすべてのスレッド間で共有されるべきだと思いますか? – thalsharif