2011-10-14 5 views
119

IntentServiceServiceの違いは何ですか?IntentServiceとサービスの違いは何ですか?

+1

http://techtej.blogspot.com.es/2011/03/android-thread-constructspart-4.html –

+5

ここで本当に良いの比較: http://stackoverflow.com/questions/15524280/service-vs-intent-service – Moemars

+1

上記のリンクに行ってください。本当に良いですよ...彼らのために非常に大きな感謝... –

答えて

110

要するに、サービスは、開発者がバックグラウンド操作を設定するための広範な実装であり、IntentServiceはバックグラウンドのスレッド作成とクリーンアップを処理する「ファイアアンドファー」操作に便利です。ドキュメントから

サービス Aサービスは、ユーザと対話しないが、より長いランニング動作を実行する、または使用する他のアプリケーションのための機能を提供するか、アプリケーションの要望を表すアプリケーション・コンポーネントです。

IntentService サービスは、(インテントとして表される)オンデマンドでの非同期リクエストを処理IntentService サービスの基本クラスです。クライアントはstartService(Intent)コールで要求を送信します。必要に応じてサービスが開始され、ワー​​カースレッドを使用して各インテントが順番に処理され、作業が終了するとサービスが停止します。

は、このドキュメントを参照してください - http://developer.android.com/reference/android/app/IntentService.html

+6

IntentServiceはServicesの基本クラスではありません。その逆は真です。チェック - http://developer.android.com/reference/android/app/IntentService.html – Darpan

+5

@Darpanこれは、単に "サービス"ではなく、 "非同期要求を処理するサービス"の基本クラスです。それで、上記の文が正しいのです。 – nucleo

+0

こんにちは、サービス内にIntentServiceを書くことはできますか?はいの場合は、誰でも例/コードスニペットを提供してください。ありがとう –

58

サービス:それはあなたのシステムのバックグラウンドで実行されます。例えば、

  1. あなたはホテルに行っている場合や、サーバー
  2. にスープのためのあなたの順序を与えるサーバーは、ご注文を取得し、あなたはスープがあるのか​​分からない
  3. シェフに送りますキッチンで作られたスープを作るのにどのようなプロセスが必要ですか?
  4. 注文が完了すると、サーバーからスープが届きます。

バックグラウンド・プロセス:シェフのスープ

IntentService作る: - あなたは、サーバーへ一度に多くの食品を注文したが、サーバーがこれらのアイテムを一つずつ実現したときに、それは連続したサービスだが...(IE)と一度にそれらをすべて届けないでください。

+7

私はあなたの説明スタイルが好きです。 –

+2

申し訳ありませんが、両者の重要な違いはありません。 – eRaisedToX

+0

「連続サービス」とはどういう意味ですか? –

12

Service実際にあなたのアプリの同じスレッドで実行されます。サービスを拡張するときは、CPUブロッキング操作を実行するために新しいスレッドを手動で生成する必要があります。

IntentService

がそこからバックグラウンドの仕事をするためのスレッド(CPUブロック操作を行うための新しいスレッドを作成する必要はありません)を生成します Serviceのサブクラスです。

+0

それはCPUブロック動作を防ぐのではなく、実行するのではないですか?私は確信していませんが – committedandroider

+0

thats true、サービスneew新しいスレッドをCPUのブロック操作を実行する –

91

Serviceは、サービス実装の基本クラスです。 Serviceがアプリケーションのメインスレッドで実行されるため、アプリケーションのパフォーマンスが低下する可能性があります。したがって、サービスの直接のサブクラスであるIntentServiceは、物事をより簡単にするために利用できます。

IntentServiceは、バックグラウンドで特定のタスクを実行するために使用されます。完了すると、IntentServiceのインスタンスは自動的に終了します。その使用例は、インターネットから特定のリソースをダウンロードすることです。 IntentServiceは、ワーカースレッドを作成し、サービスを実行するために、そのスレッドを使用しながら

違い

  1. Serviceクラスは、アプリケーションのメインスレッドを使用しています。
  2. IntentServiceは、一度に1つのインテントをonHandleIntent()に渡すキューを作成します。したがって、マルチスレッドを実装するには、Serviceクラスを直接拡張する必要があります。 ServiceクラスはstopSelf()を使用して手動停止が必要です。一方、IntentServiceは、実行が終了すると自動的に停止します。
  3. IntentServiceは、nullを返すonBind()を実装します。つまり、IntentServiceはデフォルトではバインドできません。
  4. IntentServiceは、インテントをキューに送信し、onHandleIntent()を送信するonStartCommand()を実装します。

簡単に言えば、IntentServiceを使用する2つのことがあります。まず、コンストラクタを実装する。第二に、onHandleIntent()を実装する。他のコールバックメソッドでは、superを呼び出して適切に追跡する必要があります。 IntentServiceは、ワーカースレッドを作成し、サービスを実行するために、そのスレッドを使用しながら

+0

Nice Explaination。私は音楽アプリを作っています。それで、どちらがいいの?サービスまたはIntentService? –

+7

私はあなたがサービスを使用しなければならないと思います。なぜなら、デフォルトでは、IntentServiceはアンバインドできないからです。音楽アプリを停止して音楽アプリにバインドする必要があります。すでに述べたように、IntentServiceは「開始と忘却」の方が優れています – Premier

+0

@Premier IntentServiceはService.START_NOT_STICKYと似ていませんか?あなたの例によると、それはまた "始まりと忘れ"です。 –

3

違い

  1. サービスクラスは、アプリケーションのメインスレッドを使用しています。
  2. IntentServiceは、一度に1つのインテントをonHandleIntent()に渡すキューを作成します。したがって、マルチスレッドを実装するには、サービスクラスを直接拡張する必要があります。
  3. サービスクラスでは、stopSelf()を使用して手動で停止する必要があります。一方、インテントサービスは、インテントがキューにないときに自動的に停止します。
  4. IntentServiceはnullを返すonBind()を実装しています。つまり、IntentServiceはデフォルトでバインドできません。
  5. IntentServiceは、IntentをキューおよびonHandleIntent()に送信するonStartCommand()を実装しています。
+1

サービスはonStartCommandも実装していませんか? –

5

Service:それは数秒後にANRを(Androidは応答なし)が発生しますので、メインスレッドで動作します。

IntentServiceServiceメインスレッドとやりとりすることなく別のバックグラウンドスレッドが別の方法で処理します。

+0

*サービス:メインスレッドで動作するため、数秒後にANR(Android Not Responding)が発生する* - サービスを数時間、数時間稼働させることができ、ANRを見たことがないので、本当です。 –

1

意向サービスは、サービス

IntentServiceの子である:あなたのアプリを開くの開始時に画像の束をダウンロードする場合。これは一度だけのプロセスで、すべてがダウンロードされると自分自身をきれいにすることができます。

サービス:Web APIコールを使用してアプリケーションとバックエンド間の通信に常に使用されるサービス。それは、現在のタスクを終了した場合でも、あなたはまだそれがより多くの通信UIなしで

9

サービス

  • タスクのために、数分後の周りになりたいが、長いタスクのために使用すべきではありません。どのスレッドからトリガonStartService()
  • で長いタスク
  • 呼び出しをするために、サービス内のスレッドを使用して、
  • メインスレッドで
  • ラン
  • main(UI)スレッド

IntentService

  • をブロックすることがあります長いタスクは、通常、メインとの通信はありません通信は、それがハンドラによって行わまたは意向メインスレッドからトリガ
  • 介し
  • 呼び出しをブロードキャストされる必要がある場合読み取る別個のスレッド
  • ランを(意図はメインスレッドとワーカースレッド上で受信されるをspawedされます)
  • タスクを並行して実行することはできず、複数のインテントは同じワーカースレッド上でキューに入れられます。
3

サービス

これは、すべてのサービスの基本クラスです。このクラスを拡張するときは、アプリケーションが実行しているすべてのアクティビティのパフォーマンスを低下させる可能性があるデフォルトでは、サービスがアプリケーションのメインスレッドを使用するため、すべてのサービスの作業を行う新しいスレッドを作成することが重要です。

IntentService

これは、すべての起動要求を1つずつ処理するためのワーカースレッドを使用してサービスのサブクラスです。これは、サービスが複数の要求を同時に処理する必要がない場合に最適なオプションです。あなたがする必要があるのは、onHandleIntent()を実装することです。これはバックグラウンド作業を行うことができるように、各開始要求のインテントを受け取ります。 IntentServiceは、ワーカースレッドを作成し、サービスを実行するために、そのスレッドを使用しながら

違い

サービスクラスは、アプリケーションのメインスレッドを使用しています。 IntentServiceは、一度に1つのインテントをonHandleIntent()に渡すキューを作成します。したがって、マルチスレッドを実装するには、サービスクラスを直接拡張する必要があります。 サービスクラスは、stopSelf()を使用して手動で停止する必要があります。一方、インテントサービスは、インテントがキューにないときに自動的に停止します。 IntentServiceは、nullを返すonBind()を実装しています。つまり、IntentServiceはデフォルトでバインドできません。 IntentServiceは、インテントをキューおよびonHandleIntent()に送信するonStartCommand()を実装しています。

31

この件については、Tejas Lagvankarのpostを参照してください。 以下は、ServiceとIntentServiceおよびその他のコンポーネントの主な違いです。

enter image description here

+1

すばらしい表情報 –

関連する問題