誰かが本当の違いを教えてもらえますか?
5 に答える
私の経験則では、はシングルにAsyncTask
関連付けられた何かを実行したい場合に使用し、 は開始したアクティビティがバックグラウンドで実行された後に実行される何かを実行したい場合に使用します。Activity
Service
Activity
したがって、UI を拘束せずに で少しバックグラウンド処理を行いたい場合は、を使用しAsyncTask
ます。次に、そのデフォルトHandler
を使用しActivity
てメッセージを返し、メイン スレッドで更新が確実に行われるようにします。メイン スレッドで更新を処理することには 2 つの利点があります。UI の更新が正しく行われることと、同期の問題についてあまり心配する必要がないことです。
たとえば、ダウンロードに時間がかかる場合は、Service
. したがってActivity
、自分のアプリケーションまたは別のアプリケーションで別のアプリケーションに完全に移動した場合Service
でも、実行を続けてファイルをダウンロードし続けることができるため、アプリケーションに戻ったときに準備が整います。この場合、ダウンロードが完了したら、おそらくステータス バー通知を使用して、ユーザーが都合のよいときにいつでもアプリケーションに戻ることができるようにします。
AsyncTask
実行時間の長いプロセスに を使用すると、 から離れた後も続行される可能性がありますが、次のことがわかりますActivity
。
Activity
処理が完了したときに がバックグラウンドにある場合、結果などで UI を更新しようとすると問題が発生する可能性があります。Activity
メモリが必要な場合、背景はService
.
バックグラウンドで長時間実行する必要がある場合は、Serviceを使用します。いかなる活動にも拘束されません。標準的な例は、音楽プレーヤーです。
AsyncTaskは、現在のアクティビティ中にバックグラウンドで何かを実行する必要がある場合に最適です。たとえば、ダウンロード、ファイル内のテキストの検索などです。
個人的には、ハンドラーを使用して変更を UI スレッドに投稿するだけです。たとえば、バックグラウンド スレッドでいくつかの計算を行い、ハンドラーを介して結果をポストします。
結論: ほとんどの場合、AsyncTaskが必要です。
サービスと AsyncTask の違いに関するここでの他の回答を補完するために、注目に値する [0]:
- サービスは個別のプロセスではありません。Service オブジェクト自体は、それが独自のプロセスで実行されていることを意味しません。特に指定がない限り、アプリケーションと同じプロセスで実行されます。
- サービスはスレッドではありません。それ自体は、メイン スレッドから離れて作業を行う手段ではありません (アプリケーションが応答しないエラーを回避するため)。
サービスは、通常、アクティビティに貢献したり、UI の応答性を向上させたりする AsyncTask ではなく、アプリケーションの重要な部分を説明するものになる傾向があります。コードの明快さを向上させるだけでなく、サービスを他のアプリケーションと共有することもでき、アプリと外界との間の明確なインターフェースを提供します。
本というよりは、開発者ガイドに良い答えがたくさんあると思います。
[0] ソース: http://developer.android.com/reference/android/app/Service.html#WhatIsAService
- AsyncTask: UI をハングさせずに何かを行い、変更を UI に反映させたい場合。
例:ボタン クリックで何かをダウンロードし、同じアクティビティにとどまり、進行状況バー/シークバーを表示して、ダウンロードされたパーセンテージを更新します。アクティビティがバックグラウンドに入ると、競合が発生する可能性があります。
- サービス: UI を更新する必要がないことをバックグラウンドで実行したい場合は、サービスを使用します。アプリケーションがフォアグラウンドにあるかバックグラウンドにあるかは関係ありません。
例: Android マーケットからダウンロードしたアプリがステータス バーに通知を表示し、UI が前のページに戻り、他の操作を実行できるようになる場合。