AsyncTask线程永远不会死

我使用AsyncTask来获取数据,以响应用户按下button。 这样做效果良好,在获取数据时保持接口响应,但是当我检查了Eclipsedebugging器中发生了什么时,我发现每次创build一个新的AsyncTask (通常是因为它们只能被使用一次),一个新的线程正在创build,但从未终止。

结果是大量的AsyncTask线程就在那里。 我不确定这是否是一个实践中的问题,但我真的想摆脱这些额外的线程。

我怎样才能杀死这些线程?

AsyncTaskpipe理一个使用ThreadPoolExecutor创build的线程池。 它将有5到128个线程。 如果有超过5个线程,那么这些额外的线程将在被移除之前最多停留10秒。 (注意:这些数字是针对当前可见的开源代码,因Android版本而异)。

请单独离开AsyncTask线程。

除了CommonsWare的回应:

目前我正在使用Android 2.2,而且我的应用程序在任何时候都只使用一个AsyncTask,但是我正在每x分钟创build一个新的。 首先,新的AsyncTask线程开始出现(一个新的AsyncTask的线程),但在5个线程(如CommonsWare提到的)之后,它们在debugging窗口中保持可见状态,并在需要新的AsyncTask线程时重新使用。 他们只是呆在那里,直到debugging器断开连接。

同样的症状在这里。 在我的情况下,线程在我杀了活动后挂了,我希望应用程序完全closures。 问题部分通过使用单线程执行程序解决:

  myActiveTask.executeOnExecutor(Executors.newSingleThreadExecutor()); 

这使得线程在完成工作后消失。

使用ThreadPoolExecutor 。

 BlockingQueue workQueue= new LinkedBlockingQueue<Runnable>(100); // Work pool size ThreadPoolExecutor executor = new ThreadPoolExecutor( Runtime.getRuntime().availableProcessors(), // Initial pool size Runtime.getRuntime().availableProcessors(), // Max pool size 1, // KEEP_ALIVE_TIME TimeUnit.SECONDS, // KEEP_ALIVE_TIME_UNIT workQueue); 

使用execute()方法发布您的Runnable任务。

 void execute (Runnable command) 

在将来执行给定的任务。 任务可以在新的线程或现有的池中执行

关于你的第二个查询:

我怎样才能杀死这些线程?

一旦你用ThreadPoolExecutor完成了所有的工作,就可以在下面的post中引用它:

如何正确closuresjava的ExecutorService