私のプロジェクトでは、ページの読み込み中に 3 つの異なる URL (webservice) からデータを並行して読み込みたいと考えています。
このために、3 つの異なる asynctask を使用してデータをロードします。
最初の asynctask が開始されたときに進行状況ダイアログ メッセージを「読み込み中」として表示し、最後の asynctask が完了した後にダイアログを閉じます (完了した 3 つのタスクが進行状況ダイアログを表示するまで)。
この場合の対処法を教えてください。
私のプロジェクトでは、ページの読み込み中に 3 つの異なる URL (webservice) からデータを並行して読み込みたいと考えています。
このために、3 つの異なる asynctask を使用してデータをロードします。
最初の asynctask が開始されたときに進行状況ダイアログ メッセージを「読み込み中」として表示し、最後の asynctask が完了した後にダイアログを閉じます (完了した 3 つのタスクが進行状況ダイアログを表示するまで)。
この場合の対処法を教えてください。
この状況を処理するには、さまざまな方法があります。
タスクの数で初期化されたカウンター変数を使用できます。このカウンターは、AsyncTaskが完了するとデクリメントされます。カウンターが0の場合、ProgressDialogは閉じられます。このデクリメントを実行し、AysncTaskのそれぞれで進行状況ダイアログの却下を確認できますonPostExecute。
3つの異なるは必要ない場合がありますAsyncTask。同期のためにシングルAsyncTaskを使用できます。CountDownLatchThread
実行できる1つOnThreadFinishListenerの方法は、(onThreadFinish()メソッドを使用して)インターフェースを作成し、アクティビティーにそれを実装させることです。AsyncTaskスレッドが終了するたびにメソッドを呼び出すように、すべてのユーザーが自分自身をリスナーに登録する必要がありますonThreadFinish。onThreadFinishメソッドでは、バックグラウンドで実行されているスレッドがまだあるかどうかを確認する必要があります(のようなものif (asyncTask1.getStatus() == AsyncTask.Status.RUNNING || asyncTask2.getStatus() == AsyncTask.Status.RUNNING ... ))
すべてがfalseの場合は、を却下できますprogress dialog。
あなたは以下のようにそれをすることができます:
//define progress dialog object globally in your parent class
ProgressDialog pd = null;
AsyncTask1 onPreExecute:
pd = ProgressDialog.show(this, "title", "loading", true);
AsyncTask2:
//do nothing
AsyncTask3 onPostExecute:
if(pd!=null)
pd.dismiss();