调用task.execute()时,ASyncTask不会执行

时间:2011-08-10 18:07:05

标签: android multithreading android-asynctask

我有一个Android应用程序,它有主要的UI线程,以及我使用ASyncTask生成的其他一些工作线程。

但是,有一种情况我可以在每次使用task.execute()尝试使用ASyncTask生成新线程时生成,并且它不会调用doInBackground()。线程似乎永远不会开始。然后我的应用程序似乎旋转了一会儿,然后开始挂起。

以下是我使用的主题: enter image description here

以下是设备上的内存使用情况:

enter image description here

由于内存问题,它看起来不像是无法生成。

还有其他一些我不知道的潜在原因吗?最大线程数?有什么办法让我找出它为什么没有执行?

2 个答案:

答案 0 :(得分:4)

AsyncTask使用内部使用的ThreadPoolExecutor,核心池大小为5,LinkedBlockingQueue。简单来说:您可以同时激活5个AsyncTasks。其他任务将排队,直到其中一个AsyncTasks不从doInBackground()返回。

您可能需要查看代码以释放一些AsyncTasks。如果那不可能,您可以尝试根据可以找到here的原始AsyncTask代码在项目中创建CustomAsyncTask类。尝试将CORE_POOL_SIZE变量设置为更高的值或使用SynchronousQueue

答案 1 :(得分:1)

您是否阅读了文档?

  

注意:此函数会在队列中为单个任务计划任务   后台线程或线程池取决于平台   版。首次引入时,AsyncTasks在a上串行执行   单背景线程。从DONUT开始,这被改为a   线程池允许多个任务并行运行。后   HONEYCOMB,计划将此更改回单个帖子   避免并行执行导致的常见应用程序错误。如果你   真正想要并行执行,你可以使用   executeOnExecutor(Executor,Params ...)此方法的版本   THREAD_POOL_EXECUTOR;但是,请参阅那里的评论以获得警告   它的用途。

Source