web-dev-qa-db-ja.com

Android:複数のインテントサービスまたは複数のインテントを持つ1つのインテントサービス?

IntentServiceについて少し混乱しています。ドキュメントによると、intentServiceに複数のタスク(インテント)を送信すると、1つの別々のスレッドで次々に実行されます。私の質問は-複数のintentServiceスレッドを同時に持つことは可能ですか?同じintentService(同じスレッド)で3つの異なるインテントを作成することと、それぞれが独自のスレッドと1つのインテントを実行する3つの別々のintentServiceを作成することを、コードでどのように区別しますか?

つまり、コマンドstartService(intent)を実行すると、インテントが1つのキューに入れられますか、それとも毎回新しいキューが開始されますか?

Intent someIntent1 = new Intent(this, myIntentService.class);
Intent someIntent2 = new Intent(this, myIntentService.class);
Intent someIntent3 = new Intent(this, myIntentService.class);
startService(someIntent1);
startService(someIntent2);
startService(someIntent3);
13
Jon

1)複数のintentServiceスレッドを同時に持つことは可能ですか?

いいえ、各IntentServiceには、「startService」が呼び出された順序で要求を実行するために使用する HandlerThread が1つだけあります。何らかの理由でIntentServiceに独自のスレッドを生成することにした場合を除きますが、そもそもIntentServiceを使用する目的が損なわれる可能性があります。同じマニフェスト宣言のサービス、つまりサービス名= "。MyIntentService"(これは通常のサービスでも同じ)はプロセス内でシングルトンとして実行されるため、サービスが強制終了されるまで、同じサービスは追加の開始リクエストを受け取ります。

2)同じIntentServiceで3つの異なるインテントを作成することをコードでどのように区別しますか?

リクエストを区別するには、意図したとおりにインテントシステムを使用してください。サービスが実行できるジョブごとに異なる「アクション」を提供し、サービスの開始に使用しているIntentオブジェクトのエクストラとして、その特定のジョブに対してIntentServiceが正しく実行するために必要なエクストラを渡します。

12
Submersed