2012-12-04 12 views
16

私はどのような場合にサービスを開始し、どのような場合にサービスをバインドする必要がありますか?たとえば、音楽サービスのAndroidクライアントですか?システムの優先順位の違いはありますか?共通ルールはありますか。他に何か?Androidサービス:バインドまたは開始しますか?

答えて

18

startService()は、起動後に独立して動作するサービスに使用します。音楽プレーヤーは良い例です。これらは、stopSelf()を呼び出すか、誰かがstopService()を呼び出すまで実行されます。

インテントを前後に送信することで、実行中のサービスと通信することができますが、ほとんどの場合、サービスを開始して単独で実行できます。

サービスとクライアントが永続的な接続を介して通信する場合は、bind()を使用します。良い例は、ロケーション更新をクライアントに送り返すナビゲーションサービスです。バインダーはインテントよりも書くのがずっと難しいですが、実際にはこの使用例のために行く方法です。優先順位について

:プロセスのすべての活動は、彼らの視界を失ったとき、それはonStart()で開始されたサービスをホストしている場合、プロセスは、サービスプロセスとなり、それ以外の場合はバックグラウンド・プロセスになります。サービスプロセスは、バックグラウンドプロセスよりも優先度が高くなります。詳細は、android developer siteを参照してください。

目に見えるアクティビティのないサービスプロセスの優先度が高い場合(例えば、本当に中断されるべきでない音楽プレイヤーなど)は、startForeground()を呼び出すことができます。

+2

Google開発者チュートリアルでは、バックグラウンドで音楽を再生している独自のサービスにアクティビティをバインドする必要がある音楽アプリケーションでは、バインディングがうまくいくと述べています。のために使用される。私はコメントしています。今私は同じ質問で苦労しています。 –

+0

Googleの開発者向けのチュートリアルはひどいものであり、逸失しています。 –

+0

本当にどちらの方法でも動作します。 startService()は、通常は独自のサービスを実行するための最良の選択であり、appとサービスが一定の前後の通信にある場合には、通常はbind()が最適です。しかし、startService()スタイルのサービスと前後の通信にIntentを使用することも、bind()を使ってサービスを起動して起動させることもできます。いずれにしてもあなたはしたいですか?率直に言えば、バインダーはたくさん書かなければならないので、私はそれらを避けます。また、Binderの便利なラッパーであるResultReceiverを使用することもできます。 –

関連する問題