2011-12-05 111 views
5

我想在一个单独的线程上完成一个工作/任务队列,但一次只能处理一个工作。所以不是同时的。Android线程队列

是否有内置的android为此?

感谢,

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

+0

通常情况下,阅读DB上的“单独的线程”完成,但更新UI必须在主线程来完成。所以这些任务不会在同一个线程上按顺序进行。 – Tom

回答

13

你检出了java.util.concurrent.Executors吗?你可以这样做:

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

它不是特定于android的,它是jdk5的一部分。

从DOC:

创建一个使用单个worker线程的 无界队列操作执行器。 (但是请注意,如果单个线程关闭前的执行期间终止 由于故障,一个新的人会 如果需要执行后续任务,取代它的位置。)的任务是 保证顺序地执行,并且不超过一个任务在任何给定时间将为 有效。与其他等效的 newFixedThreadPool(1)不同,保证返回的执行程序不会被 重新配置为使用其他线程。

+0

我相信我可以在工作完成后更新UI线程? – pdiddy

+0

通常情况下,当工作完成后,您可以更改您的UI,在UI线程上执行或使用处理程序发布消息 – gwa

3

如果您希望能够独立于可以排队工作的活动生命周期工作,请参阅IntentService。它可以旋转起来,异步地完成不连续的工作块,然后在所有任务完成时自行完成。

如果你不需要任何东西,生活中可以没有任何活动,Java有几个不同的实现沿ExecutorService