13

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

つまり、コマンド 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);
4

1 に答える 1

12

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

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

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

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

于 2016-06-13T17:05:41.690 に答える