3

サービスと対話する方法が一方向である場合 (つまり、サービスを呼び出して、結果を求めずに何かを実行するだけです)。これら2つのアプローチの違いは何ですか:

  1. startService(intent) そしてonStartCommandタスクは依存しますintent.getAction
  2. サービスをバインドし、 を使用してメッセージをサービスに送信しますMessenger。そのため、そのサービスはメッセージに基づいてタスクを実行します。

ここに私が考えることができる1つの違いがあります(よくわかりません):
アプローチ1の場合、 を呼び出すたびにサービスをstartService作成する必要があるため、 を使用しない限り、毎回サービスを作成する必要があるという過負荷ですSTART_STICKY

4

1 に答える 1

2

いくつかの違いがありますが、最も重要なのはスレッド管理です。

IntentService Intent サービスを使用する場合、onHandleIntent は単一のデーモン スレッドで呼び出されます。startService への新しい呼び出しはそれぞれ、onHandleIntent への順序どおりにキューに入れられた呼び出しとして表示されます。その結果、そのデーモン スレッド上で、単純で適切に動作する順序どおりの呼び出しが実行されます。ところで、キューが空になるまでサービスは停止しません。「再作成」する必要はありません

同じアプリ内のバインドされたサービス バインドされたサービスには、実際には 2 つのケースがあります。プロセスで実行されている場合、サービスは UI スレッドで実行されます。UI スレッドから何かを実行する必要がある場合は独自のスレッド (おそらくルーパー) を構築し、Messenger でそれと対話する必要があります。結果はより柔軟になります (スレッド数、キューイング順序などは自由です) が、IntentService と非常によく似ています。

別のアプリ内のバインドされたサービス バインドされたサービスが別のアプリケーション に属している場合、そのサービスへの呼び出しは複数のバインダー スレッドの 1 つで実行されます。これらのスレッドを管理する必要はありません。これらはフレームワークによって提供されます。ただし、呼び出しを順不同で実行することはできます。

于 2013-02-27T15:15:13.040 に答える