IntentService
では実行できても では実行できないことService
(およびその逆)の例を探しています。
IntentService
また、 は別のスレッドで実行されますが、 は実行されないと思いますService
。したがって、私の理解では、独自のスレッド内でサービスを開始することは、 を開始することと同じですIntentService
。これは正しいですか?
ベストアンサー1
テジャス・ラグヴァンカールは素晴らしい役職この件について。以下に、Service と IntentService の主な違いをいくつか示します。
いつ使うのですか?
サービスはUI のないタスクでも使用できますが、長すぎるべきではありません。長いタスクを実行する必要がある場合は、サービス内でスレッドを使用する必要があります。
IntentServiceは、通常、メイン スレッドとの通信を行わない長いタスクで使用できます。通信が必要な場合は、メイン スレッド ハンドラーを使用するか、インテントをブロードキャストできます。もう 1 つの使用例は、コールバックが必要な場合です (インテントによってトリガーされるタスク)。
どのようにトリガーしますか?
サービスはメソッドを呼び出すことによってトリガーされます
startService()
。IntentServiceはIntent を使用してトリガーされ、新しいワーカー スレッドを生成し、
onHandleIntent()
このスレッドでメソッドが呼び出されます。
トリガー元
- サービスとIntentService は、任意のスレッド、アクティビティ、またはその他のアプリケーション コンポーネントからトリガーされる可能性があります。
走る
サービスはバックグラウンドで実行されますが、アプリケーションのメイン スレッド上で実行されます。
IntentServiceは別のワーカー スレッドで実行されます。
制限事項 / 欠点
サービスはアプリケーションのメイン スレッドをブロックする可能性があります。
IntentServiceはタスクを並列に実行できません。したがって、連続するすべてのインテントはワーカー スレッドのメッセージ キューに入り、順番に実行されます。
いつ止めるべきか?
Serviceを実装する場合、
stopSelf()
または を呼び出して、作業が完了したらサービスを停止するのはユーザーの責任ですstopService()
。(バインディングのみを提供する場合は、このメソッドを実装する必要はありません)。IntentServiceは、すべての開始要求が処理された後にサービスを停止するため、 を呼び出す必要はありません
stopSelf()
。