当我在UI上按下button1(执行)时,我运行AsyncTask。任务运行成功。
我按下另一个按钮2(取消)以停止主线程中的asynctask
asynctask.cancel(true);
但AsyncTask线程不要自杀! (见第二个截图) asynctask切换到WAIT模式
然后我可以再次按下button1(执行)并运行NEW任务并按下按钮2(取消)
我有排队:
为什么任务在使用取消后没有自我杀戮(真实)? 而whay意味着WAIT模式?
答案 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.
还有一个最大称为最大池大小。