2011-12-05 149 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