スレッドまたはサービスはいつ使用する必要がありますか?
それらは認証に使用されるべきですか?たとえば、私のアプリでは、スレッドまたはサービスの使用を検討していました(Active Directoryを介して認証しています)。
それぞれがいつ使用されるかの例はありますか?
スレッドは、UIの更新をブロックする長時間実行プロセスで使用する必要があります。 1〜2秒以上の場合は、バックグラウンドスレッドに入れて、ダイアログやスピナーなどでユーザーに通知することをお勧めします。 UIスレッドを5秒以上ロックすると、OSから「強制終了または待機」オプションが表示されます。
サービスは別のスレッドで実行されないため、UIはブロックされますが、サービス内に新しいスレッドを生成できます。サービスは、一定の間隔で発生する必要があるもの、またはUIが表示されていないときに何かを実行/チェックし続けるために、より多く使用されます。
更新:Androidのドキュメントには、対応する説明が含まれているようです。 http://developer.Androidを参照してください。 com/reference/Android/app/Service.html#WhatIsAService 。
元の回答:
Androidでは、Service
は同時実行(「バックグラウンドで実行」)を提供しません。実際には、new
を介したアプリケーションではなく、Javaシステムを介してインスタンス化(および管理)されるだけの単純なAndroidオブジェクトです。
したがって、サービスの最も重要な特性は、ワークロードの延期に関するものではありません。これは単純なスレッドで実現できます。
サービスオブジェクトを特別なものにしているのは、それがAndroidシステムに登録されていることですサービスとして。これにより、このオブジェクトが何らかのサービスを提供し、should可能な限り、または停止するまで存続することがシステムに通知されます。通常のアプリケーションスレッドは、Androidシステムにとってこの特別な意味を持たず、システムの裁量ではるかに寛大に終了します。
したがって、アプリケーション/ Activity
がアクティブな間だけ実行するためにいくつかのバックグラウンドアクティビティが必要な場合、スレッドは必要なことを実行できます。
そのコンポーネントが必要な場合 アクティブに保つ しばらくして、AndroidシステムがActivities
をメモリから削除することを決定した場合でも、パージされません。サービス、または「フォアグラウンドサービス」に移動する必要があります。システムであり、リソースを再利用するために終了する可能性はさらに低くなります。
もちろん、必要に応じて、Service
オブジェクトに1つ以上のThread
インスタンスを含めることもできます。これらのインスタンスは、Service
オブジェクト自体と同じ長さで存続できます。
編集:
ああ、それに加えて:もちろん、サービスは、他のアプリケーションにサービスを提供したい場合にの方法です。サービスのみにバインド」します。
この素敵な投稿を見てください Androidスレッドコンストラクト(パート4):比較 。
または サービス、非同期タスク、スレッドの違いは? 。
他のアプリケーションで使用されているもの、またはアプリケーションアクティビティよりも長生きするものが必要な場合は、サービスを使用してください。サービスの良い例は、時間がかかる可能性があり、この時間中にユーザーにアプリケーションの使用を強制したくないファイル転送です。それ以外の場合は、スレッドを(通常はAsyncTaskなどを介して)使用します。
認証の目的では、AsyncTask
は良い選択のようです。
Android開発者ガイド( http://developer.Android.com/guide/components/services.html#Basics ):
サービスは、ユーザーがアプリケーションを操作していないときでもバックグラウンドで実行できる単なるコンポーネントです。したがって、それが必要な場合にのみサービスを作成する必要があります。
メインスレッドの外部で作業を実行する必要があるが、ユーザーがアプリケーションを操作しているときにのみ実行する必要がある場合は、代わりにサービスではなく新しいスレッドを作成する必要があります。たとえば、音楽を再生したいが、アクティビティの実行中にのみ、onCreate()でスレッドを作成し、onStart()で実行を開始してから、onStop()で停止することができます。また、従来のThreadクラスの代わりに、AsyncTaskまたはHandlerThreadの使用を検討してください。スレッドの詳細については、プロセスとスレッドのドキュメントを参照してください。
サービスを使用する場合でも、デフォルトではアプリケーションのメインスレッドで実行されるため、集中的な操作やブロック操作を実行する場合は、サービス内に新しいスレッドを作成する必要があります。
主な違いはAndroidシステムの態度です。サービスはAndroidインフラストラクチャの一部なので、Androidはサービスを認識しますアプリケーションの動作部分として、最後のオプションとしてサービスの強制終了を検討します。さらに、フォアグラウンドアクティビティと同じくらい重要にするために、サービスの優先度を調整できます。スレッドに関しては、Androidスレッドを保持する必要のある重要な部分として認識します。したがって、通常のスレッドは、強制終了される可能性がはるかに高くなります。
たとえば、動作中のスレッドを開始してからバックグラウンドに移行するアクティビティがある場合、Androidはスレッドを動作中の部分として認識しないため、アクティビティやサービスがないため、アプリケーションは何もしないと考える可能性があります作業スレッドを含むアプリ全体を実行して強制終了します。