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