2011-07-19 5 views
0

私はこの例に基づいてメディアプレイアプリを開発しています:How to design activity-service interaction for a simple mp3 player?実行中のサービスからデータを要求する最善の方法は何ですか?

それは問題なく動作しますが、私はオンデマンドでサービスからデータを要求する方法がわかりません。具体的には、ソングの位置をプログレスバーで更新して、サービスがその情報をクライアントのアクティビティに戻すことができるようにします。更新は1秒に1回発生します。

オンデマンド(つまり、アクティビティが表示されている場合のみ)であるため、ブロードキャストはおそらく解決策ではありません。

これまで知っていたことから、私はメッセンジャーを使うことができました。サービスをバインドすることもできました。

与えられた状況では、どのようなものが最適でしょうか。更新頻度は1秒ですか?

追加:私の知る限りでは

それがバインドされたときに、サービスが活動を停止します。これは、もちろん、私が音楽プレーヤーで欲しいものではありません。私は、サービスをバインドし、startService()を使用してインテントでコマンドを送信することを試みました。これは正常に動作するようですが、それは賢明なアプローチですか?私がこれを行うのは、startServiceによって開始されたときにアクティビティが停止した後にサービスが継続して生き続けるからです。

答えて

0

音楽プレーヤーを実装するためのガイドラインをお探しの場合は、アンドロイドのデフォルトMusic Playerソースを確認するのが最適です。

あなたの質問には、あなたの活動をサービスにバインドし、サービスへの参照を保持することが適切な方法だと思います。アクティビティでタイマーを開始するだけで、毎秒現在の進行状況をサービスに尋ねるだけです。

追加: ソースコードを再度確認してください。すべてのアクティビティがサービスからバインド解除されると、再生するものがあるかどうかチェックされます。再生するものがあれば、ではなく、が停止し、再生が継続されます。それ以外の場合、サービスは停止します(リソースを解放し、再度必要な時間待機する)。実生活で実装されている上記を確認するには、Unbind()のMusicPlaybackServiceのメソッドを確認してください。

+0

ありがとうございました。私はMusic Playerのソースを調べることを考えなかった。私は縛られたサービスの生涯に関する追加の質問で私の元の投稿を更新しました。 – marlar

+0

私の答えも更新しました。 –

+0

さて、もう少し明確になっています。それでも、ユーザーが携帯電話をポケットに入れて長時間聞く場合のように、サービスが一時停止して最終的に死亡したとすると、サービスも停止することはありませんか?それとも私が誤解したことですか? – marlar

関連する問題