Android Looper / Handler的并发问题

时间:2015-07-10 07:36:08

标签: android concurrency jobs android-handler

我有一个顺序执行的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;当第二个作业在它上面运行导致这个过程停止时?

0 个答案:

没有答案