Android アプリケーションを作成するプログラムがあります。
このプログラムのメイン クラスは、非同期タスクを使用して接続し、データを要求します。接続と要求データはどちらもボタンで開始され、どちらの場合もプログレス バーが表示されます。
connectの非同期タスクを開始すると、プログラムはメソッドonPreExecute()、doInBackground()、onProgressUpdate()、およびonPostExecute()を実行しますが、これは予想どおりです。
ただし、onPostExecute()の後、デバッガー ウィンドウを見ると、AsyncTaskはまだ実行されており、引き続き実行されます。次にデータを要求すると、新しいAsyncTaskが作成され、2 つ実行されます。
しばらくプログラムを使用した後、約 20の AsyncTaskスレッドがまだ実行されている状態になるため、最初のAsyncTask (実際には 2 番目の AsyncTask が終了したら)を終了するにはどうすればよいですか?
以下にコードを含めました。
private ProgressDialog connectionDialog;
private ProgressDialog requestDataDialog;
private ProgressDialog usingDialog;
private int currentDialog;
public void connectClick(View view) //When the connect button is clicked
{
currentDialog = 1;
new PerformTask().execute();
}
private class PerformTask extends AsyncTask<Void, Integer, Integer>
{
protected void onPreExecute()
{
showDialog(currentDialog);
}
protected Integer doInBackground(Void... voi)
{
int total = 0;
//Perform the task required
publishProgress(total);
return total;
}
protected void onProgressUpdate(Integer... progress)
{
usingDialog.setProgress(progress[0]);
}
protected void onPostExecute(Integer result)
{
removeDialog(currentDialog);
}
}
protected Dialog onCreateDialog(int id)
{
//Setup the dialogs
}
public void requestDownloadClick(View view)
{
currentDialog = 2;
new PerformTask().execute();
}