安卓线程队列

8

我希望在单独的线程上拥有工作/任务队列,但一次只能处理一个工作,不能同时进行。

安卓中是否有内置功能可以实现这个需求?

谢谢,

编辑: 工作 = 从数据库获取信息。完成后,使用提取的信息更新UI。


通常情况下,读取数据库会在“单独的线程”上完成,但更新用户界面必须在主线程上完成。因此,这些任务不会在同一线程上按顺序完成。 - Tom
3个回答

17

你是否看过java.util.concurrent.Executors?你可以像这样做:

final static ExecutorService tpe = Executors.newSingleThreadExecutor();
...
tpe.submit(new Runnable() {
    @Override
    public void run() {
        // your work
    }
}):

这并不是Android特定的,它是JDK5的一部分。

从文档中可以看到:

创建一个使用单个工作线程和无界队列的执行程序。(但是请注意,如果此单个线程在关闭之前由于执行期间发生故障而终止,则如果需要执行后续任务,则将替换一个新线程。) 任务保证按顺序执行,并且任何给定时间只有一个任务处于活动状态。与否则等效的newFixedThreadPool(1)返回的执行器保证不能重新配置以使用其他线程。


我相信当工作完成时,我可以更新UI线程。 - pdiddy
通常情况下,当工作完成后,您可以通过在UI线程上执行或使用处理程序发布消息来更改用户界面。 - gwvatieri
太棒了,为我节省了数小时的时间。 - AVEbrahimi

3
如果您需要一个能够独立于活动生命周期进行工作并可以执行排队工作的东西,您应该看一下IntentService。它可以异步地启动、执行离散的工作块,然后在完成所有任务时结束自身。
如果您不需要任何可以在没有任何活动的情况下存在的东西,Java有ExecutorService以及几种不同的实现方式。

0

1
加载器已经过时。 - AVEbrahimi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接