web-dev-qa-db-ja.com

サービス、非同期タスク、スレッドの違いは?

サービス、非同期タスク、スレッドの違いは何ですか。私が間違っていなければ、それらのすべてがバックグラウンドでいくつかのことをするために使用されます。だから、どのようにいつ使用するかを決める方法は?

145
SpunkerBaba

おそらくあなたはすでにそれらについてのドキュメントの説明を読んでいます、私はそれらを繰り返さず、代わりに私が自分の言葉で答えをしようとします。

  • サービスはアクティビティに似ていますが、インターフェースはありません。たとえば、天気を取得する場合は、空のアクティビティを作成しません。そのためには、サービスを使用します。

  • スレッドはスレッドです。おそらく他の部分から既に知っているでしょう。スレッドからUIを更新できないことを知っておく必要があります。このためにハンドラを使用する必要がありますが、さらに読んでください。

  • AsyncTaskは、使用することが推奨されるインテリジェントなスレッドです。メソッドを支援することができるインテリジェントで、UIスレッドで実行される3つのメソッドがあり、UIコンポーネントを更新するのに適しています。

サービス、AsyncTasksを頻繁に使用しています。 AsyncTaskでほとんどすべてのことができるので、スレッドを少なくするか、まったくしない。

182
Pentium10

これはあなたの質問に対する最も簡単な答えです

スレッド

はメインスレッドに「並列」で実行される実行単位ですは重要なポイントです。ここのスレッドからUIコンポーネントを更新することはできませんメインスレッドを除く。

AsyncTask

は特別なスレッドで、UIを更新するヘルパーメソッドを提供します。したがって、基本的にはAsyncTaskがバックグラウンドスレッドで実行される場合でもUIを更新できます。プロセス間通信の処理は、明示的に行う必要はありません。

サービス

上記の問題を解決するのは、それが呼び出されるアクティビティとは別個に存在するため、アクティビティが破棄された場合でも実行を継続できるためです。メインスレッドで実行(ANRに注意)バックグラウンドサービスを使用(IntentServiceを拡張すると、ワーカースレッドが自動的に作成されます)サービスはUIのない​​アクティビティのようなものです、長いタスクに適しています

22

数日前に誰かが私に言ったことを望んでいるより多くの情報:

  • スレッドなどのグローバル変数をアクティビティとサービス間で共有できます。
  • applicationとそのすべてのグローバル変数は、アクティビティまたはサービスがまだ存在している限り消去されません。
  • アプリにサービスのインスタンスがあり、OSがリソースを必要とする場合、最初にアクティビティを強制終了しますが、サービスがある限り、OSはアプリケーションをグローバル変数と共に消去しません。

私のユースケースは次のようなものです。サーバーに接続されたグローバルスペースに1つのスレッドがあり、結果を表示するアクティビティがあります。ユーザーがホームボタンを押すと、アクティビティがバックグラウンドになり、新しいサービスが開始されます。次に、このサービスはスレッドから結果を読み取り、必要に応じて通知領域に情報を表示します。 OSがアクティビティを破壊する心配はありません。サービスが実行されている限り、スレッドが破壊されることがわかっているからです。

15
Peter Jankuliak

要するに、Service for time consuming tasksAsyncTask for short-lived tasksThread is standard Java construction is threads 。

9
Abbath

開発者の観点から:

Thread:メインスレッドと並行してコードへのセットを実行するために使用されます。ただし、スレッド内でUIを処理することはできません。そのためには、Handlerを使用する必要があります。 Hadlerはスレッドのように機能しますが、UIも処理できます。

ASyncTask:メインスレッドで動作させることができないタスクを処理するために使用されます。たとえば、HTTPリクエストはメインスレッドで処理できない非常に重い作業であるため、ASyncTaskでHTTPリクエストを処理します。バックグラウンドでメインスレッドと非同期に並行して動作します。コールバックメソッドはほとんどありません。対応するイベントで呼び出されます。

サービス:バックグラウンドプロセスです。 UIが関連付けられていない処理を実行する必要がある場合に使用されます。

3
Rahul Raina

サービスはアクティビティに時間がかかるタスクに似ていますが、非同期タスクを使用すると、スレッドを操作することなく、長い/バックグラウンド操作を実行して、その結果をUIスレッドに表示できます。

2
pankaj