多くのアプリは、バックグラウンドでデータを転送する必要があります。このガイドでは、信頼性の高いバックグラウンド データ転送の選択肢と、その実装方法の例について説明します。
一般的なバックグラウンド データ転送のシナリオ
このセクションでは、アプリがデバイスとの間でデータを転送する必要がある一般的な状況について説明します。また、状況に応じて適切なツールを選択できるようにします。
API を選択する際は、次の点を考慮する必要があります。
- 移行はユーザーが開始したものですか?
- この転送を処理する既存の API はありますか?
- 処理をすぐに実行する必要があるか。
オプション | 使用場面 | タイミング | 例 |
---|---|---|---|
アプリが非表示のときに実行する必要がある、10 分未満の実行時間のタスクのスケジュール設定に使用します。 |
延期可能: 制約によって調整することもできます 即時: 処理をすぐに実行する必要がある場合は
|
データをサーバーと定期的に同期する ネットワーク接続中にメディアをダウンロードまたはアップロードする(ユーザーによるものではない)バックグラウンドで開始 |
|
データ転送がユーザーによってトリガーされ、転送の進行状況をユーザーに通知する必要がある場合。 |
ユーザーが開始(ボタンのクリックなど) - すぐに開始 |
写真のアップロード、ファイルのダウンロード |
|
短時間で重要なタスクの場合や、WorkManager を使用できない場合。転送の進行状況が通知されます。 |
すぐに開始 |
|
|
特定のオペレーションに存在する場合に使用します。パフォーマンスの最適化やシステム統合の改善などのメリットが得られます。 |
場合によって異なる |
接続されたデバイスとのデータの同期 |
シナリオが一般的なシナリオに記載されていない場合は、次のセクションでユースケースに最も適した API を見つけてください。WorkManager が適切である可能性が高いです。
ユーザーが開始するデータ転送ジョブタイプを使用する
アプリでリモート サーバーにデータを転送する必要がある場合は、ユーザーが開始するデータ転送ジョブを使用することをおすすめします。このジョブタイプは、次の条件に該当する場合に適しています。
- お客様がデータ転送を開始した
- データ転送の進行状況をユーザーに通知し続ける必要があること
- システムが転送を中断すると、ユーザー エクスペリエンスが損なわれます。
これらの条件のいずれかが満たされていない場合は、代わりに WorkManager を使用する必要があります。
たとえば、メディアアプリでアルバムをダウンロードしてローカルで再生できるようにするなどです。ユーザーがプレイリストをダウンロードしてすぐに再生する場合は、ユーザーが開始するデータ転送ジョブタイプを使用できます。一方、ユーザーがダウンロードした再生リストをユーザーが開始しなくてもバックグラウンドで定期的に更新したい場合は、WorkManager の方が適しています。
ユーザーが開始するデータ転送ジョブの作成と実行方法など、詳細については、ユーザーが開始するデータ転送ジョブのドキュメントをご覧ください。
データ転送に WorkManager を使用する
ほとんどの場合、WorkManager は、作業をスケジュールする必要がある場合に最適なオプションです。タスクは、システムによって中断または延期されるように設計する必要があります。詳細については、WorkManager のドキュメントをご覧ください。
バックグラウンド データ転送に WorkManager を使用する際は、次の点に注意してください。
- 処理をできるだけ早く実行する必要がある場合は、急ぎの処理リクエストのスケジュールを設定できます。このオプションは、ブロードキャスト、正確なアラーム、優先度の高い FCM メッセージに応じて処理をスケジュールする場合に特に便利です。
- 処理を定期的に実行する必要がある場合は、定期的な処理をスケジュール設定できます。定期的な WorkRequest を使用すると、処理の実行頻度をおおよそ指定できますが、特定の時間は保証されません。これにより、システムはさまざまなアプリからの作業リクエストをスケジュールし、デバイスの需要を均衡させることができます。
- ジョブを実行する適切な状況を指定するには、処理の制約を定義する必要があります。たとえば、アプリで緊急でないリソースをダウンロードする必要がある場合は、デバイスが充電中かつ定額制ネットワークに接続されているときにジョブを実行するように指定できます。これにより、WorkManager はシステムの負荷を分散するタイミングでジョブを実行できます。
- WorkManager は、必要に応じてジョブをキャンセルして再試行できます。たとえば、ジョブの実行中にユーザーがデバイスの電源を切った場合、デバイスが再び使用可能になったときにシステムはジョブを再試行できます。キャンセルと再試行のサイクルが正しく機能するように、ワークフローを設計してテストしてください。
- 長時間実行(フォアグラウンド サービス)ワーカー: WorkManager は、アプリのフォアグラウンド サービスを作成することで、10 分を超える作業をサポートできます。つまり、バックグラウンドからの起動に関する制限や実行上限など、フォアグラウンド サービスとジョブと同じ制限が適用されます(10 分を超えるジョブはシステムによってスケジュールが変更されます)。
JobScheduler は、バックグラウンド処理のスケジュール設定に代わるオプションです。WorkManager とは対照的に、より多くの構成を行う必要がありますが、そのメリットとして、WorkManager で現在利用できない API(setPrefetch
、setUserInitiated
、getPendingJobReasons
など)にアクセスできます。
特定の API を使用する
利用可能な API(コンパニオン デバイス マネージャーなど)がある場合は、その API を使用します。利用できない場合は、connectedDevice
フォアグラウンド サービスを使用します。
AI プロンプト
ユースケース固有の API を特定する
このプロンプトでは、データ転送タスクに使用する特定の API を指定します。
I want to transfer data from an Android mobile device to [device_type]. Is there a specific API available?
より具体的なフォアグラウンド サービス タイプを使用する
特定のバックグラウンド タスクに WorkManager と JobScheduler が適切でない場合は、フォアグラウンド サービスを使用する必要がある場合があります。
いつものように、フォアグラウンド サービスの使用を検討する場合は、ユースケースに適した代替 API があるかどうかを検討する必要があります。
短いサービス フォアグラウンド サービスを使用する
アプリで短時間の重要なタスクを実行する必要がある場合は、shortService
フォアグラウンド サービスが最適な選択肢となる可能性があります。shortService
フォアグラウンド サービスが適切な状況をいくつか示します。
- ユーザーがアクション(サーバーへのデータの同期など)を開始し、ユーザーがすぐにアプリをバックグラウンドに送信した場合でも、オペレーションが確実に完了するようにしたい場合。
- インメモリ情報を永続ストレージに保存する。
- 情報の暗号化または復号。
詳細については、shortService
のドキュメントをご覧ください。
接続されたデバイスのフォアグラウンド サービスを使用する
別のローカル デバイスにデータを転送する必要がある場合は、connectedDevice
フォアグラウンド サービスを使用することをおすすめします。次のような場合に、この操作が必要になることがあります。
- ヘッドフォンやスマートウォッチなどの Bluetooth アクセサリとの通信
- USB 接続、NFC、ローカル インターネット接続を介して、ローカルに接続されたデバイスにデータを転送する
ただし、このような状況では、フォアグラウンド サービスを使用する代わりに、コンパニオン デバイス マネージャーを使用してデバイスに接続できる場合があります。通常、ユースケースに特化した API が利用可能な場合は、フォアグラウンド サービスを使用するよりも、その API を使用することをおすすめします。
新しいメディア処理フォアグラウンド サービスを使用する
メディアデータを処理する必要がある場合は、mediaProcessing
フォアグラウンド サービスを使用できます。このサービスタイプは、アプリが Android 15 以降を対象としている場合に使用できます。たとえば、アプリで再生のためにメディアをある形式から別の形式にコード変換する必要がある場合は、このサービスタイプが適しています。詳細については、メディア処理のフォアグラウンド サービスに関するドキュメントをご覧ください。