2010-12-04 10 views
12

Android Serviceを説明してください。 Activityとどのように違いますか?前景/背景ので実行するなどのアプリケーションの状態に依存しますか。Androidサービス

答えて

28

をチェックアウト:

Aサービスは、ユーザーとの対話ではないながら、どちらか長いランニング動作を実行するために、アプリケーションの欲求を表現するアプリケーションコンポーネントです他のアプリケーションが使用するための機能を提供することができます。

その彼らのホスティングプロセスのメインスレッドで実行する他のアプリケーションのオブジェクトのようなサービスを、注意することが非常に重要です。これは、あなたのサービスがCPUを集中的に(例えばMP3再生)やブロックする(ネットワーキングのような)操作を行う場合、その作業を行う独自のスレッドを生成するはずであることを意味します。

これは最良のユーザが直接見て、と相互作用するものとして理解されている活性とは対照的である(UI)

サービス、上述したように、長い実行操作に使用することができますフォアグラウンドの活動がなくても続行しますが、Androidのライフサイクルによっては「バックグラウンド」の状態になると最終的に殺される可能性があります。サービスが強制終了されずに1つのインスタンスとして実行され続ける必要がある場合は、サービスのonCreateメソッドにstartForeground(int id, Notification notification)を、サービスのonDestroyメソッドにstopForeground(boolean removeNotification)を配置することをおすすめします。

例えば、アンドロイドデバイスがユーザーの身体の隣にあるときに、夜間に加速度計データを記録するためにforeground Serviceを使用するアプリがあります。それがアクティブである必要はないが、私はまた、それがまたActivity内部BroadcastReceiverにエキストラとして加速度計データとIntentを放送する必要があることをServiceを告げるServiceBroadcastReceiverからIntentをブロードキャストActivityを持っています。

コード: SleepActivity SleepAccelerometerService

幸運とあなたが任意のより多くの情報が必要な場合は私に知らせて!

+1

"SleepAccelerometerService"の2番目のリンクが壊れています。 – gonzobrains

+0

電話がスリープ状態になってもサービスを実行するために、何らかのWakeLockを使用する必要がありますか? – gonzobrains

+0

長時間実行されているすべてのCPUおよびCPUを多用する操作では、サービスがデフォルトで実行され、UIスレッドで実行されるため、新しいスレッドでサービスコードを実行したい場合があります。ほとんどのニーズにIntentServiceを使用できます。 HandlerThreadとThreadPoolExecutorはより柔軟ですが、より複雑な選択肢です。 –