2

またはスレッドまたはサービスとスレッドのIntentService代わりに使用することの本当の利点は何ですか?AsycTask

4

6 に答える 6

4

インテント サービス メイン スレッドとの通信がありません。ワーカー スレッドで実行します。並列タスクはありません。すべての要求は、単一のワーカー スレッドで処理されます。

スレッド は単独で実行されます。並列処理のための複数のスレッド。

UI を使用せずにメイン スレッドでサービスを実行します。実行時間の長いプロセス ブロックのメイン スレッド。長時間実行されるプロセスには、サービス内のスレッドを使用します。

AsyncTask 長時間実行されているプロセスがメイン スレッドに通信します。ワーカー スレッドで実行します。

実装でどちらを使用するかを決定する前に、それぞれの正確な目的を知っておく必要があります。

于 2012-07-21T10:43:07.177 に答える
4

IntentService を使用する主な利点はいくつかあります。

  • 実装が簡単。オーバーライドする必要があるメソッドは 1 つだけです
  • 簡単にデータを渡すことができます。インテントエクストラメカニズムを使用するだけです
  • アプリ内のどこでも利用できます。manifest.xml に登録されている
  • 複数のインテントを処理します。これらはキューに入れられ、順番に実行されます。
  • 自己終了。キュー内のインテントが処理されると、サービスは停止します。

これらの利点を組み合わせることで、IntentService メカニズムは便利かつ強力になります。

于 2012-07-21T11:23:14.967 に答える
2

Service は、ユーザーと対話せずに実行時間の長い操作を実行したい、または他のアプリケーションが使用する機能を提供したいというアプリケーションの要求を表すアプリケーション コンポーネントです。各サービス クラスには、そのパッケージの AndroidManifest.xml に対応する宣言が必要です。サービスは Context.startService() と Context.bindService() で開始できます。

サービスは、他のアプリケーション オブジェクトと同様に、ホスティング プロセスのメイン スレッドで実行されることに注意してください。これは、サービスが CPU 集中型 (MP3 再生など) またはブロック (ネットワークなど) 操作を行う場合、その作業を行う独自のスレッドを生成する必要があることを意味します。詳細については、プロセスとスレッドを参照してください。IntentService クラスは、実行する作業をスケジュールする独自のスレッドを持つ Service の標準実装として利用できます。

AsyncTask を使用すると、UI スレッドを適切かつ簡単に使用できます。このクラスを使用すると、スレッドやハンドラーを操作することなく、バックグラウンド操作を実行し、UI スレッドで結果を公開できます。

AsyncTask は、Thread と Handler のヘルパー クラスとして設計されており、一般的なスレッド フレームワークを構成するものではありません。AsyncTasks は、理想的には短い操作 (せいぜい数秒) に使用する必要があります。スレッドを長時間実行し続ける必要がある場合は、次のような java.util.concurrent パッケージで提供されるさまざまな API を使用することを強くお勧めします。 Executor、ThreadPoolExecutor、および FutureTask。

非同期タスクは、バックグラウンド スレッドで実行され、その結果が UI スレッドで発行される計算によって定義されます。非同期タスクは、Params、Progress、および Result と呼ばれる 3 つのジェネリック タイプと、onPreExecute、doInBackground、onProgressUpdate、および onPostExecute と呼ばれる 4 つのステップによって定義されます。

于 2012-07-21T10:12:18.757 に答える
0

Serviceユーザーがアプリケーションを操作していないときでも、バックグラウンドで実行できます。これがシナリオの場合は、サービスを使用してください。Threadメインスレッドではなく、ユーザーがアプリケーションと対話しているときにのみ何らかの作業を実行する必要がある場合に使用します。典型的な例は、スレッドを作成するよりも、アクティビティの実行中に音楽を再生することです。AsyncTaskスレッドの単なるヘルパー クラスです。

サービスはアプリケーションのメイン スレッドで実行されているため、ブロック操作を実行している場合でも、サービス内に新しいスレッドを作成するか、IntentServiceすでにそれを行っているものを使用する必要があります。IntentServiceワーカースレッドを備えた単なるサービスです。

于 2012-07-21T10:50:09.457 に答える