我有一个Android应用程序,它有主要的UI线程,以及我使用ASyncTask生成的其他一些工作线程。
但是,有一种情况我可以在每次使用task.execute()尝试使用ASyncTask生成新线程时生成,并且它不会调用doInBackground()。线程似乎永远不会开始。然后我的应用程序似乎旋转了一会儿,然后开始挂起。
以下是我使用的主题:
以下是设备上的内存使用情况:
由于内存问题,它看起来不像是无法生成。
还有其他一些我不知道的潜在原因吗?最大线程数?有什么办法让我找出它为什么没有执行?
答案 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;但是,请参阅那里的评论以获得警告 它的用途。