ThreadPoolを使用したい
ThreadPool は管理されたスレッドのグループであり、キューに置かれた一連の割り当てられたタスクを並行して実行するのを待っています。
Java は、単純な固定サイズのプールから、効率を最大化するためにワークロードに基づいて動的に拡張するプールまで、プールを管理する多くの方法を提供します。
典型的なパターンは、android が UI スレッドで実行したくないすべてのタスク (例: ネットワーク操作) にスレッドプールを使用することです。ただし、ほとんどの場合、スレッドは結果を UI に投稿する必要がありますが、これは UI スレッドの外部からは防止されます。これは、スレッド プールを作成する方法です。
ExecutorService threadExecutor = Executors.newFixedThreadPool( 3 );
threadExecutor.execute(new Runnable(){
public void run(){
//put here your network code
//when you get the result, either use
//view.post(new Runnable...);
//or
//AsynchTask
}
});
必要に応じて、さまざまな目的で複数のスレッド プールを使用できますが、一般に、Android について言えば、アクティブなスレッドの総数を低く抑えることをお勧めします。
ハードウェアによっては、コアあたり 2 スレッドが推奨されますが、これは IO バウンド (ネットワークなど) と CPU バウンド (グラフィックスなど) のアクティビティの比率によって異なります。
キュー内のエントリに優先順位を付けるには、 http: //www.javamex.com/tutorials/threads/thread_pools_queues.shtml のように独自の ThreadPoolExecutor を作成し、代わりに PriorityQueue を渡すことをお勧めします。
BlockingQueue q = new PriorityQueue<Runnable>();
ThreadPoolExecutor ex = new ThreadPoolExecutor(4, 10, 20, TimeUnit.SECONDS, q);
関連項目: ThreadPoolExecutor とカスタム タスクを使用して PriorityBlockingQueue を実装する方法