どのような場合にサービスを開始し、どのような場合にサービスをバインドする必要がありますか? たとえば、音楽サービスの Android クライアントですか? システムの優先度に違いはありますか。共通のルールはありますか。他に何か?
1 に答える
startService()
起動後に独立して実行されるサービスに使用します。音楽プレーヤーが良い例です。これらは、彼らが呼び出すstopSelf()
か、誰かが呼び出すまで実行されますstopService()
。
インテントをやり取りすることで実行中のサービスと通信できますが、ほとんどの場合、サービスを開始して単独で実行するだけです。
bind()
サービスとクライアントが永続的な接続を介してやり取りする場合に使用します。良い例は、位置の更新をクライアントに送り返すナビゲーション サービスです。バインダーはインテントよりも書くのがはるかに難しいですが、この使用例には実際に適しています。
優先度について: プロセスのすべてのアクティビティが可視性を失うと、プロセスは で開始されたサービスをホストしている場合はサービス プロセスonStart()
になり、そうでない場合はバックグラウンド プロセスになります。サービス プロセスは、バックグラウンド プロセスよりも優先度が高くなります。詳細については、Android デベロッパー サイトをご覧ください。
目に見えるアクティビティのないサービス プロセスに高い優先度が必要な場合 (たとえば、実際に中断されるべきではない音楽プレーヤー)、サービスは を呼び出すことができますstartForeground()
。