完成后,Android AsyncTask仍处于运行状态

时间:2010-08-17 09:58:20

标签: android multithreading

在处理应用程序时,我注意到线程数一直在增长。 AsyncTask线程由于某种原因保持打开状态(我确信它们已经完成处理并退出)。我不知道为什么我会继续创建更多这种类型的线程,并且它们会无限期地继续运行。

有没有办法验证这些线程是否在完成时终止? 是否存在AsyncTask线程保持打开的已知问题?

运行时:

public  class DoNothingTask extends AsyncTask<Void, Void, Void> {

        @Override
        protected Void doInBackground(Void... params) {
            // TODO Auto-generated method stub
            return null;
        }

    }

我每次在debbuger中看到一个新线程new DoNothingTask().execute(null); 如下:

Thread[<ThreadNumber>AsyncTask#1](running)

我的问题是这是为什么?我的应用程序非常依赖于AsyncTask,我不能创建新的线程并在每个任务后保持活跃。

3 个答案:

答案 0 :(得分:10)

我也正在敲打这个问题,只是碰到了这个答案(好吧,这更多的是解释而不是答案):

CommonsWare解释说:

  

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

     

请单独留下AsyncTask线程。

来源问题: AsyncTask threads never die

答案 1 :(得分:1)

我不确定这是否相关,但我在我的一个应用程序中也遇到了类似的问题。

我有一个初始化TimerTask线程的活动。任务在指定的时间间隔内正确执行,但在一些空闲时间之后,这些线程的数量似乎会增加(显示线程保持打开状态并创建新线程)。问题是Android VM动态加载和卸载我的应用程序。在每次新的应用程序加载时,原始线程永远不会被杀死,线程初始化曾经发生过。这就是我的应用程序中的线程总数上升的原因。

您的应用程序中是否也有类似的实现。

答案 2 :(得分:-2)

你应该使用

thread.join

确保线程完成。你在做这个吗?