2つ以上のサービスを一貫して実行するためのベストプラクティスは何ですか?
例: RESTサービスはいくつかのデータを取得し、新しいものがある場合はダウンロードサービスを実行する必要がありますか?
最初のサービスが終了した後、受信機にブロードキャストを送信しています。受信機はインテントからデータを取得し、それを2番目のサービスに送信します。
2つの間に入れずに、を直接Intentからに送信することもできます。RestServiceDownloadServiceBroadcastReceiver
私はIntentServiceあなたのためのより良いアプローチになると思いますDownloadService。
IntentServiceは、非同期要求(Intentsとして表される)をオンデマンドで処理するサービスの基本クラスです。クライアントはstartService(Intent)呼び出しを介してリクエストを送信します。サービスは必要に応じて開始され、ワーカースレッドを使用して各インテントを順番に処理し、作業がなくなると自動的に停止します。
この「ワークキュープロセッサ」パターンは、通常、アプリケーションのメインスレッドからタスクをオフロードするために使用されます。IntentServiceクラスは、このパターンを単純化し、メカニズムを処理するために存在します。これを使用するには、IntentServiceを拡張し、onHandleIntent(Intent)を実装します。IntentServiceは、インテントを受け取り、ワーカースレッドを起動し、必要に応じてサービスを停止します。
すべてのリクエストは単一のワーカースレッドで処理されます。必要なだけ時間がかかる場合がありますが(アプリケーションのメインループをブロックすることはありません)、一度に1つのリクエストのみが処理されます。
編集:API Level 9 AndroidにはDownloadManagerダウンロードを処理するクラスがあるため、障害や接続の変更などの後でダウンロードを再試行することを忘れてしまいました。