asynctask WAIT模式

时间:2014-10-08 20:53:46

标签: android-asynctask wait kill

当我在UI上按下button1(执行)时,我运行AsyncTask。任务运行成功。

Run first time task

我按下另一个按钮2(取消)以停止主线程中的asynctask

asynctask.cancel(true);

但AsyncTask线程不要自杀! (见第二个截图) asynctask切换到WAIT模式

task in wait mode

然后我可以再次按下button1(执行)并运行NEW任务并按下按钮2(取消)

enter image description here

我有排队:

为什么任务在使用取消后没有自我杀戮(真实)? 而whay意味着WAIT模式?

1 个答案:

答案 0 :(得分:0)

引擎盖下的AsyncTask使用ThreadPoolExecutor。这些线程可能不会消失一点,因为过于频繁地创建和拆除这些线程是一种浪费。如果你创建了更多的AsyncTasks,你会发现它会停止创建新的线程并重新使用旧的线程。

更新以解决一些细节:

你会认为如果池中有空闲线程,它就不会创建新线程,但这不完全正确。我们的想法是,有一定数量的线程可用于继续处理异步任务。这称为核心池大小。在Android的AsyncTask案例中,它们似乎已将其设置为5.如果查看ThreadPoolExecutor的文档,它会说:

When a new task is submitted in method execute(Runnable), and fewer than corePoolSize threads are running, a new thread is created to handle the request, even if other worker threads are idle.

还有一个最大称为最大池大小。