多くのアプリは、バックグラウンドでデータを転送する必要があります。このガイドでは、信頼性の高いバックグラウンド データ転送の選択肢と、その実装方法の例について説明します。
一般的なバックグラウンド データ転送のシナリオ
このセクションでは、アプリがデバイスとの間でデータを転送する必要がある一般的な状況について説明し、状況に適したツールを選択できるようにします。
API を選択する際は、次の点を考慮する必要があります。
- 転送はユーザーが開始したものですか?
- この転送を処理する既存の API はありますか?
- 作業をすぐに実行する必要がありますか?
オプション | 使用場面 | タイミング | 例 |
---|---|---|---|
アプリが非表示のときに実行される 10 分未満のタスクをスケジュール設定する場合。 |
遅延可能: 制約によって調整することも可能 Immediate: 作業をすぐに実行する必要がある場合は、
|
データをサーバーと定期的に同期する ネットワーク接続中にメディアをダウンロードまたはアップロードする(ユーザーが開始したものではない) |
|
ユーザーがデータ転送をトリガーし、転送の進行状況をユーザーに通知する必要がある場合。 |
ユーザーが開始(ボタンクリックなど) - すぐに開始 |
写真のアップロード、ファイルのダウンロード |
|
短時間で重要なタスクの場合や、WorkManager を使用できない場合。通知によって、移行の進行状況がユーザーに通知されます。 |
すぐに開始 |
|
|
特定のオペレーションに存在する場合は使用します。パフォーマンスの最適化やシステム統合の改善などのメリットが得られます。 |
場合によって異なる |
接続されたデバイスとのデータの同期 |
一般的なシナリオに該当しない場合は、次のセクションを参照して、ユースケースに最適な API を見つけてください。WorkManager が適切である可能性が高いです。
ユーザーが開始するデータ転送ジョブタイプを使用する
アプリでリモート サーバーにデータを転送する必要がある場合は、ユーザーが開始するデータ転送ジョブの使用を検討してください。このジョブタイプは、次の条件に該当する場合に適しています。
- ユーザーがデータ転送を開始した
- データ移行の進捗状況をユーザーに通知する必要があります
- システムが転送を中断すると、ユーザー エクスペリエンスが低下します。
これらの条件のいずれかが満たされていない場合は、代わりに WorkManager を使用する必要があります。
たとえば、メディアアプリで、ユーザーがアルバムをダウンロードしてローカルで再生できるようにする場合があります。ユーザーがプレイリストをダウンロードしてすぐに再生したい場合は、ユーザーが開始するデータ転送ジョブタイプを使用することをおすすめします。一方、ユーザーがダウンロードしたプレイリストをユーザーの操作なしでバックグラウンドで定期的に更新したい場合は、WorkManager の方が適しています。
ユーザー開始のデータ転送ジョブの作成と実行方法など、詳細については、ユーザー開始のデータ転送ジョブのドキュメントをご覧ください。
データ転送に WorkManager を使用する
ほとんどの場合、WorkManager は作業のスケジュール設定が必要な場合に最適なオプションです。タスクは、システムによって中断または延期されるように設計する必要があります。詳しくは、WorkManager のドキュメントをご覧ください。
バックグラウンドでのデータ転送に WorkManager を使用する際は、次の点にご留意ください。
- 処理をできるだけ早く実行する必要がある場合は、優先度の高い処理リクエストをスケジュールできます。このオプションは、ブロードキャスト、正確なアラーム、優先度の高い FCM メッセージに応じて作業をスケジュールする場合に特に便利です。
- 作業を定期的に実行する必要がある場合は、定期的な作業をスケジュールできます。定期的な WorkRequest では、ワークの実行頻度をおおよそ指定できますが、特定の時間を保証するものではありません。これにより、システムはさまざまなアプリからの作業リクエストをスケジュールして、デバイスの負荷を分散できます。
- ジョブを実行する適切な状況を指定するには、処理の制約を定義する必要があります。たとえば、緊急性のないリソースをダウンロードする必要があるアプリの場合、デバイスが充電中で、従量制課金ではないネットワークに接続されているときにジョブを実行するように指定できます。WorkManager は、システムの負荷のバランスが取れたタイミングでジョブを実行できます。
- WorkManager は、必要に応じてジョブをキャンセルして再試行できます。たとえば、ジョブの実行中にユーザーがデバイスの電源を切った場合、デバイスが再び使用可能になったときにシステムがジョブを再試行できます。キャンセルと再試行のサイクルが正しく機能するように、ワークフローを設計してテストしてください。
- 長時間実行(フォアグラウンド サービス)ワーカー: WorkManager は、アプリのフォアグラウンド サービスを作成することで、10 分以上かかる作業をサポートできます。つまり、バックグラウンドからの起動に関する制限や実行制限(10 分以上かかるジョブはシステムによって再スケジュールされます)など、フォアグラウンド サービスやジョブと同じ制限の対象となります。
JobScheduler は、バックグラウンド処理をスケジュールするための代替オプションです。WorkManager とは対照的に、より多くの構成が必要になりますが、setPrefetch
、setUserInitiated
、getPendingJobReasons
など、現在 WorkManager で使用できない 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 以降を対象としている場合に利用できます。たとえば、アプリで再生のためにメディアをある形式から別の形式にトランスコードする必要がある場合は、このサービスタイプが適しています。詳しくは、メディア処理フォアグラウンド サービスのドキュメントをご覧ください。