我有一个创建Android应用程序的程序。
此程序的主要类使用异步任务进行连接,然后请求数据。通过按钮启动连接和请求数据,并且在两种情况下都显示进度条。
当我为连接启动异步任务时,程序会运行方法 onPreExecute(), doInBackground()< / strong>, onProgressUpdate()和 onPostExecute(),这是预期的。
然而,在 onPostExecute()之后,当我查看调试器窗口时, AsyncTask 仍在运行并继续运行。当我再请求数据时,会创建一个新的 AsyncTask ,并且我有两个正在运行。
如何在使用该程序一段时间后终止第一个 AsyncTask (实际上是第二个已完成),我最终得到了大约20个 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();
}
答案 0 :(得分:0)
为了完整性,所以我可以接受这个问题,这是答案,由grv_9098给出,发现于stackoverflow.com/a/3077508/1514187:
AsyncTask管理使用ThreadPoolExecutor创建的线程池。它将有5到128个线程。如果有超过5个线程,那么这些额外的线程将被移除最多10秒钟。 (注意:这些数字适用于目前可见的开源代码,因Android版本而异。)
请保留AsyncTask线程。