1

2つ以上のサービスを一貫して実行するためのベストプラクティスは何ですか?

例: RESTサービスはいくつかのデータを取得し、新しいものがある場合はダウンロードサービスを実行する必要がありますか?

最初のサービスが終了した後、受信機にブロードキャストを送信しています。受信機はインテントからデータを取得し、それを2番目のサービスに送信します。

4

1 に答える 1

2

2つの間に入れずに、を直接Intentからに送信することもできます。RestServiceDownloadServiceBroadcastReceiver

私はIntentServiceあなたのためのより良いアプローチになると思いますDownloadService

IntentServiceは、非同期要求(Intentsとして表される)をオンデマンドで処理するサービスの基本クラスです。クライアントはstartService(Intent)呼び出しを介してリクエストを送信します。サービスは必要に応じて開始され、ワー​​カースレッドを使用して各インテントを順番に処理し、作業がなくなると自動的に停止します。

この「ワークキュープロセッサ」パターンは、通常、アプリケーションのメインスレッドからタスクをオフロードするために使用されます。IntentServiceクラスは、このパターンを単純化し、メカニズムを処理するために存在します。これを使用するには、IntentServiceを拡張し、onHandleIntent(Intent)を実装します。IntentServiceは、インテントを受け取り、ワーカースレッドを起動し、必要に応じてサービスを停止します。

すべてのリクエストは単一のワーカースレッドで処理されます。必要なだけ時間がかかる場合がありますが(アプリケーションのメインループをブロックすることはありません)、一度に1つのリクエストのみが処理されます。

編集:API Level 9 AndroidにはDownloadManagerダウンロードを処理するクラスがあるため、障害や接続の変更などの後でダウンロードを再試行することを忘れてしまいました。

于 2012-07-12T12:45:13.750 に答える