Android プラットフォームにおける Service と IntentService の違い 質問する

Android プラットフォームにおける Service と IntentService の違い 質問する

IntentServiceでは実行できても では実行できないことService(およびその逆)の例を探しています。

IntentServiceまた、 は別のスレッドで実行されますが、 は実行されないと思いますService。したがって、私の理解では、独自のスレッド内でサービスを開始することは、 を開始することと同じですIntentService。これは正しいですか?

ベストアンサー1

テジャス・ラグヴァンカールは素晴らしい役職この件について。以下に、Service と IntentService の主な違いをいくつか示します。

いつ使うのですか?

  • サービスUI のないタスクでも使用できますが、長すぎるべきではありません。長いタスクを実行する必要がある場合は、サービス内でスレッドを使用する必要があります。

  • IntentService、通常、メイン スレッドとの通信を行わない長いタスクで使用できます。通信が必要な場合は、メイン スレッド ハンドラーを使用するか、インテントをブロードキャストできます。もう 1 つの使用例は、コールバックが必要な場合です (インテントによってトリガーされるタスク)。

どのようにトリガーしますか?

  • サービスメソッドを呼び出すことによってトリガーされますstartService()

  • IntentServiceIntent を使用してトリガーされ、新しいワーカー スレッドを生成し、onHandleIntent()このスレッドでメソッドが呼び出されます。

トリガー元

  • サービスとIntentService は任意のスレッド、アクティビティ、またはその他のアプリケーション コンポーネントからトリガーされる可能性があります。

走る

  • サービスバックグラウンドで実行されますが、アプリケーションのメイン スレッド上で実行されます。

  • IntentService別のワーカー スレッドで実行されます。

制限事項 / 欠点

  • サービスアプリケーションのメイン スレッドをブロックする可能性があります。

  • IntentServiceタスクを並列に実行できません。したがって、連続するすべてのインテントはワーカー スレッドのメッセージ キューに入り、順番に実行されます。

いつ止めるべきか?

  • Serviceを実装する場合、stopSelf()または を呼び出して、作業が完了したらサービスを停止するのはユーザーの責任ですstopService()。(バインディングのみを提供する場合は、このメソッドを実装する必要はありません)。

  • IntentService、すべての開始要求が処理された後にサービスを停止するため、 を呼び出す必要はありませんstopSelf()

おすすめ記事