我有以下任务:
void task()
{
Looper.preapre();
handler = new Handler();
runnable = new Runnable()
{
if(notDone)
{
doSth();
handler.postDelay(runnable,timeInterval);
}
else
{
handler.removeCallBacks(runnable);
returnResult(); / the task is done and return some results
}
}
handler.post(runnable);
Looper.loop();
}
我将ExecutorService与单个工作线程一起使用来运行此任务,第一次运行就很好,但是第二次从未执行该任务,因为尽管我调用removeCallBacks,工作线程仍在运行第一个任务。有人知道问题出在哪里吗?预先感谢。
PS:我尝试使用Looper.quit(),但是它会杀死线程,因此执行程序无法在死线程上运行任务。
答案 0 :(得分:1)
经过研究,我发现当循环程序连接到线程时,即使线程处于空闲状态,它也将始终保持线程处于活动状态,因此ExecutorService无法取回空闲线程