我有一个顺序执行的Jobs队列 - 每个作业的onRun()如下所示:
@Override
public void onRun() throws Throwable {
if (Looper.myLooper() == null) {
Looper.prepare();
}
this.looper = Looper.myLooper();
makeQuery(looper);
Looper.loop();
}
makeQuery()函数执行一个在后台线程上运行的数据库调用,该后台线程通过将Runnable发布到此线程的处理程序来报告该作业。像这样:
{
// ... make a query in another thread...
Handler handler = new Handler(looper);
handler.post(new Runnable() {...});
}
当收到查询结果时,它会执行以下操作:
this.looper.quit();
到目前为止一切顺利 - 队列中的第一个作业执行正常,但第二个作业获得执行查询,然后上面尝试发布结果的代码 - handler.post - 失败并出现此异常:< / p>
&#34;在死线程上向处理程序发送消息&#34;
我注意到的一件事是第二个作业与第一个作业在同一个线程上运行,因此JobManager重新使用它,因为它已经配置为FIFO操作,我想这是有效的。但是,为什么线程处于退出状态&#39;退出&#39;当第二个作业在它上面运行导致这个过程停止时?