フォアグラウンド サービスのドキュメントでは、Android フォアグラウンド サービスの現在の動作について説明しています。このドキュメントでは、最新バージョンの Android をターゲットにしているかどうかにかかわらず、ほとんどのアプリに適用できるベスト プラクティスについて説明します。
このページでは、フォアグラウンド サービスに関する最近の重要な変更と、最新バージョンの Android プラットフォームをターゲットとしていないアプリへの影響について説明します。多くの場合、低い API レベルをターゲットとするアプリでは任意だったベスト プラクティスが、高い API レベルをターゲットとするアプリでは必須になります。
Android 16(API レベル 36)
以下の変更は、ターゲットとする API レベルに関係なく、Android 16 以降で動作するアプリに適用されます。
フォアグラウンド サービスから開始されたバックグラウンド ジョブは、それぞれのランタイム割り当てを遵守する必要があります。これには、
JobSchedulerで直接スケジュールされたジョブや、WorkManager やDownloadManagerなどの他のライブラリによって作成されたジョブが含まれます。ユーザー アクションに応じてデータを転送するには、ユーザーが開始するデータ転送ジョブの使用を検討してください。これらのジョブは、通常のジョブ割り当ての対象外です。
Android 15(API レベル 35)
API レベル 35 以降をターゲットとするアプリには、次の要件が適用されます。
dataSyncフォアグラウンド サービスの実行時間に関する新しい制限が追加されました。これらの制限については、フォアグラウンド サービスのタイムアウト動作をご覧ください。同様の制限が、mediaProcessingフォアグラウンド サービス タイプ(Android 15 の新機能)にも適用されます。BOOT_COMPLETEDフォアグラウンド サービスは、特定のフォアグラウンド サービスを起動できなくなりました。SYSTEM_ALERT_WINDOW権限を保持するアプリは、現在表示されているオーバーレイ ウィンドウがある場合(またはバックグラウンド開始制限の除外条件のいずれかを満たしている場合)にのみ、バックグラウンドからフォアグラウンド サービスを起動できます。以前は、これらのアプリの免除範囲はより広範でした。
Android 14(API レベル 34)
API レベル 34 以降を対象とするアプリには、次の要件が適用されます。
- サービスタイプとともにすべてのフォアグラウンド サービスを宣言する必要があります。
- アプリは、フォアグラウンド サービスが行う処理の種類に適した権限タイプをリクエストする必要があります。フォアグラウンド サービスのタイプごとに、対応する権限タイプがあります。たとえば、アプリがカメラを使用するフォアグラウンド サービスを起動する場合は、
FOREGROUND_SERVICE権限とFOREGROUND_SERVICE_CAMERA権限の両方をリクエストする必要があります。アプリが対象 API レベル 34 以降をターゲットとしており、適切な特定の権限をリクエストしていない場合、システムはSecurityExceptionをスローします。
Android 12(API レベル 31)
API レベル 31 以降を対象とするアプリには、次の要件が適用されます。
- アプリがバックグラウンドで動作しているときにフォアグラウンド サービスを起動することはできません(少数の特殊な例外を除く)。詳細と、このルールの例外については、バックグラウンドからフォアグラウンド サービスを開始する場合の制限をご覧ください。
Android 11(API レベル 30)
API レベル 30 以降を対象とするアプリには、次の要件が適用されます。
- アプリのフォアグラウンド サービスがカメラまたはマイクを使用する場合、アプリは
cameraまたはmicrophoneサービスタイプでサービスを宣言する必要があります。
Android 10(API レベル 29)
API レベル 29 以降をターゲットとするアプリには、次の要件が適用されます。
Android 9(API レベル 28)
Android 9 では、FOREGROUND_SERVICE 権限が導入されています。Android 9 で動作し、フォアグラウンド サービスを使用するアプリには、この権限が必要です。
API レベル 28 以降をターゲットとするアプリが、FOREGROUND_SERVICE 権限をリクエストせずにフォアグラウンド サービスを作成しようとすると、システムは SecurityException をスローします。