在我的应用程序中,我大约每 5 秒持续创建一个 AsyncTask。我在调试期间检查了任务,可以清楚地看到任务始终完成其进程并退出 doInBackground 方法。onPostExecute 中的任何代码都不会被执行。然而,正如我在 Eclipse 中看到的那样,AsyncTask 继续保留在内存中。我想也许它会被重用于下一个循环,或者最终被垃圾收集,但另一个被创建并继续下去。最终,它们中的足够多被创建并减慢了系统速度。
潜在的问题是什么?
在我的应用程序中,我大约每 5 秒持续创建一个 AsyncTask。我在调试期间检查了任务,可以清楚地看到任务始终完成其进程并退出 doInBackground 方法。onPostExecute 中的任何代码都不会被执行。然而,正如我在 Eclipse 中看到的那样,AsyncTask 继续保留在内存中。我想也许它会被重用于下一个循环,或者最终被垃圾收集,但另一个被创建并继续下去。最终,它们中的足够多被创建并减慢了系统速度。
潜在的问题是什么?
AsyncTask 管理一个使用 ThreadPoolExecutor 创建的线程池。它将有 5 到 128 个线程。如果线程数超过 5 个,这些多余的线程最多会停留 10 秒,然后才会被移除。(注意:这些数字是针对目前可见的开源代码,并因 Android 版本而异)。
请不要管 AsyncTask 线程
源问题:AsyncTask 线程永不消亡