在调试窗口中的onPostExecute()之后,AsyncTask仍在运行

时间:2012-08-13 09:26:12

标签: java android android-asynctask terminate

我有一个创建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();
}

1 个答案:

答案 0 :(得分:0)

为了完整性,所以我可以接受这个问题,这是答案,由grv_9098给出,发现于stackoverflow.com/a/3077508/1514187:

AsyncTask管理使用ThreadPoolExecutor创建的线程池。它将有5到128个线程。如果有超过5个线程,那么这些额外的线程将被移除最多10秒钟。 (注意:这些数字适用于目前可见的开源代码,因Android版本而异。)

请保留AsyncTask线程。