2012-05-11 36 views
2

私のプロジェクトでは、ページをロードする際に3つの異なるURL(webservice)からデータを並列にロードしたいと考えています。並列の複数のasynctaskを持つ単一のprogressdialogを処理します

私は3種類のasynctaskを使ってデータを読み込みます。

asynctaskが最初に起動されたときに進行状況ダイアログメッセージを表示し、最後にasynctaskが完了した後にダイアログを閉じる(3つのタスクが完了ダイアログを表示するまで)を表示したいとします。

このような状況に対処する方法を教えてください。

答えて

4

このような状況に対処する方法はいくつかあります。

  1. あなたはタスクの数で初期化されたカウンタ変数を使用することができ、かつAsyncTaskが完了すると、このカウンタがデクリメントされます。カウンタが0の場合、ProgressDialogは却下されます。 AysncTaskonPostExecuteのそれぞれで、この減分を行い、進行状況ダイアログの解約をチェックすることができます。

  2. あなたは3種類の異なるAsyncTaskを必要としないかもしれません。 Threadの同期にCountDownLatchの単一のAsyncTaskを使用できます。

+0

u rajeshさん、ありがとう、私はあなたの活動で1つのグローバル変数を作成し、postexecute()の値を増やし、値が "3"に達すると確認するたびにダイアログを閉じます。 –

0

あなたは以下のようにそれを行うことがあります。

//define progress dialog object globally in your parent class 
ProgressDialog pd = null; 

AsyncTask1onPreExecute

pd = ProgressDialog.show(this, "title", "loading", true); 

AsyncTask2

//do nothing 

A syncTask3onPostExecute:あなたが行うことができます

if(pd!=null) 
    pd.dismiss(); 
+1

答えを与えるためのuに感謝し、私たちが期待してい望めないが –

+0

あなたが初のonPostExecuteで2番目のタスクを開始されていません...最後にロードされasyntaskのですか? – waqaslam

+1

いいえ、3つのasyntaskを同時に実行したいです。 –

1

一つの方法は、あなたが(onThreadFinish()メソッドで)インタフェースOnThreadFinishListenerを作成し、活動がそれを実装することができます。あなたのAsyncTaskはすべて自分自身をリスナーに登録する必要があります。スレッドが終了するたびにonThreadFinishメソッドが呼び出されます。バックグラウンドで実行中のスレッドがまだある場合はすべて、あなたがprogress dialogを消すことができます偽の場合はonThreadFinish方法でそれが

を(if (asyncTask1.getStatus() == AsyncTask.Status.RUNNING || asyncTask2.getStatus() == AsyncTask.Status.RUNNING ...)のようなもの)を確認する必要があります。

関連する問題