答えて

1

正確な30のスレッドを使用している場合、変数を30で初期化し、すべてのタスク完了後にカウントを1だけ減らし、変数がゼロであるかどうかを確認します。ゼロの場合は、すべてのタスクが完了したことを示します。 ProgressDialogを閉じることができます。

+0

1を呼び出すことができ、各スレッドの終わりに

は、継続的にUIスレッドをブロックし、推奨されませんカウンタをチェックするループのために実行する必要があります。 – Akhil

+1

非同期タスクのonPostexecute()に書き込むだけではありません。 30時間だけチェックします。つまり、すべての非同期タスクに対して1回、 – 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

関連する問題