1. ホーム
  2. android

[解決済み] AndroidプラットフォームにおけるServiceとIntentServiceの比較

2022-03-23 07:28:09

質問

でできることの例を求めています。 IntentService でできないことを Service (逆もまた然り)?

また、私は IntentService は別のスレッドで実行され Service はありません。 ですから、私が見る限り、サービスをそれ自身のスレッド内で起動するのは IntentService . これでいいのでしょうか?

どのように解決するのですか?

Tejas Lagvankar さんが素敵な記事を書きました。 ポスト このテーマについて 以下は、ServiceとIntentServiceの主な相違点です。

どのような場合に使用するのか?

  • サービス はUIを持たないタスクで使用できますが、あまり長くはならないはずです。 長いタスクを実行する必要がある場合は、Service内のスレッドを使用する必要があります。

  • その IntentService は、通常メインスレッドと通信しない長いタスクで使用することができます。 通信が必要な場合は、メインスレッドハンドラやブロードキャストインテントを使用することができます。また、コールバックが必要な場合(インテントをトリガーとするタスク)にも使用することができます。

トリガーはどのように行うのですか?

  • サービス はメソッドを呼び出すことで起動します。 startService() .

  • IntentService は、Intent を使ってトリガーされ、新しいワーカスレッドを生成し、メソッド onHandleIntent() がこのスレッドで呼び出される。

トリガー元

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

ランズオン

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

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

制限事項/欠点

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

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

停止するタイミングは?

  • を実装した場合 サービス を呼び出すことで、サービスを停止させる責任があります。 stopSelf() または stopService() . (バインディングを提供するだけなら、このメソッドを実装する必要はありません)。

  • IntentService は、すべての開始要求が処理された後にサービスを停止します。 stopSelf() .