1

私はアンドロイドアプリケーションを開発しており、アプリケーションでは多くのバックグラウンドタスクを実行しています。要件は、すべての要求を順次処理し、並列に実行する必要があることです。 例:タスク要求を次々と受け取っていると仮定します。これらのタスクを追加するために、私は要求キューを維持しています。のは、現在のキューの状態があるとしましょうキューの内容に基づいてAndroidのマルチスレッドジョブエグゼキュータ

(ヘッド)タスク1 - > Task2の - タスク3 - Task4 -Task5 - Task6(テール)

私は並行してタスクを実行するスレッドプールを持っています。 Executorは常に先頭のタスクを選択し、実行するスレッドプールに送信します。 私の要求では、時には、キューからタスクを削除する必要があります。そして、もはや必要とされない古いタスクが削除されるような設計です。残っているタスクがキューで待機している間に、Task1とTask2がスレッドプールによって実行されているとします。現在のキューの状態が

である(ヘッド)タスク3 - Task4 -Task5 - Task6(テール)

コールを想定タスク3とTask4すなわち、古いタスクを削除するために作られています。これらのタスクは削除し、Task4はスレッドプールの次のタスクとして送信されます。私は必要なもの

: 私はremoveTaskが呼び出されるたびに、タスクを削除してからイベントの派遣を継続プール 2.スレッドする 1.継続的に要求キューの確認・発送作業のように、これらの操作を管理するジョブマネージャを必要としますキューが空になるまでのキュー 3.キューが空になると、スレッドは次の要求がキューに入るまで待機/スリープする必要があります。 4.ジョブマネージャはキュー内のタスクを監視して実行し、エグゼキュータサービスで実行する必要があります。キューが空の場合は待ち状態またはスリープ状態になり、キュー内に項目がある場合はタスクを実行して続行します。 5 (重要)UIスレッドにアクセス要求キューを優先させたい。

私が持っているもの: 1.私は

while(true) {  
//check for any items in the queue and execute 
} 

を使用して考え

UIスレッドとジョブマネージャ(別のbackroundのスレッド) 2.レディタスクが共有する要求キューのアトミック参照ジョブマネージャのrun()メソッドを使用していますが、キューが空の場合にCPUを不必要に消費します。

jobManagerのロジックを入力してください。

もう1つ質問します。要求キューのアトミックな参照を作成すると、スレッドの安全性が保証されますか?または要求キューの変数を同期させる必要がありますか?

+0

単純な 'HandlerThread'はあなたが望むものを作っていませんか? – pskink

+0

テープパターンをチェックしてください。http://square.github.io/tape/ – deadfish

答えて

0

jobManagerのロジックを入力してください。

これをゼロから実装する必要はありません。代わりに、ExecutorService APIを使用してください。

私が知る限り、あなたがしようとしていることはすべて、そのAPIを使用して達成することができます。 UIスレッドに優先権を与えるための要件さえも処理することができます。例えばPriorityQueueを使用します。

これらの要件を満たすためにジョブマネージャをゼロから実装することは、(無関係に)無意味です。ここで

+0

HTTPリクエストを作成する際に 'ExecutorServices'の使用法に関するいくつかの例を挙げてください。また、HTTP応答に基づいていくつかの操作を実行します。 –

0

は、スレッドプールやベストプラクティスのAndroidのドキュメントからいくつかの情報は次のとおりです。https://developer.android.com/training/multiple-threads/index.html

彼らは、バックグラウンド処理を扱うためのスレッドプールを作成して使用する方法の例を提供しています。

+0

ありがとう@srayhunter。私はすでにリクエストキューからピッキングした後にタスクを実行するためのスレッドプールを持っています。自分の要求に応じてリクエストキューを管理するためのカスタムジョブマネージャが必要です(つまり、UIスレッドを優先し、必要に応じてタスクをシリアル実行できるようにキューからタスクを削除する) – nithesh1990

関連する問題