2011-12-05 3 views
5

別のスレッドで作業/タスクのキューを作成したいのですが、一度に1つの作業しか処理できません。同時にではありません。Androidスレッドキュー

これには何か組み込みのAndroidがありますか?

おかげで、

EDIT: 仕事=データベースから情報を取得します。完了したら、取得した情報で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の一部です。ドキュメントから

は アンバウンド形式のキューなしで動作する、単一のワーカースレッドを使用するExecutorのを作成します。ただし、シャットダウン前に実行中に障害が発生したためにこの単一スレッドが終了すると、 が終了すると、新しいスレッドが実行され、後続のタスクを実行する必要がある場合は になります)。 タスクは、任意の時点で有効になります です。そうでなければ、等価の newFixedThreadPool(1)とは異なり、返されたエグゼキュータは、 が追加のスレッドを使用するように再構成できないことが保証されています。

+0

作業が完了したらUIスレッドを更新できると思いますか? – pdiddy

+0

通常のことですが、作業が完了したら、UIスレッドで実行するか、ハンドラを使ってmsgをポストするかのどちらかでUIを変更できます – gwa

3

キューに格納された作業を行うことができるアクティビティライフサイクルとは独立して作業できるものをご希望の場合は、IntentServiceをご覧ください。それはスピンアップし、ディスクリートな作業ブロックを非同期で実行し、すべてのタスクが完了したときに終了します。

アクティビティがなくても使用できるものが必要ない場合は、JavaにはExecutorServiceといくつかの異なる実装があります。

関連する問題