시스템은 dataSync 및 mediaProcessing 포그라운드 서비스가 24시간 동안 총 6시간 실행되도록 허용하며, 그 후 시스템은 실행 중인 서비스의 Service.onTimeout(int, int) 메서드(Android 15에 도입됨)를 호출합니다. (mediaProcessing 포그라운드 서비스 유형은 Android 15에서 추가되었습니다.) 6시간 제한 시간은 dataSync 및 mediaProcessing 서비스에 대해 별도로 추적됩니다. 예를 들어 dataSync 서비스가 1시간 동안 실행된 경우 앱에는 dataSync 포그라운드 서비스에 사용할 수 있는 시간이 5시간만 남지만 mediaProcessing 서비스에 사용할 수 있는 시간은 6시간이 됩니다.
포그라운드 서비스가 6시간 제한에 도달하면 서비스가 Service.stopSelf()을 호출할 수 있는 시간이 몇 초 남습니다. 시스템이 Service.onTimeout()를 호출하면 서비스는 더 이상 포그라운드 서비스로 간주되지 않습니다.
서비스가 Service.stopSelf()를 호출하지 않으면 시스템에서 내부 예외를 발생시킵니다. 예외는 다음 메시지와 함께 Logcat에 로깅됩니다.
Fatal Exception: android.app.RemoteServiceException: "A foreground service of
type [service type] did not stop within its timeout: [component name]"
이 동작 변경으로 인한 문제를 방지하려면 다음 중 하나 이상을 수행하세요.
서비스에서 새 Service.onTimeout(int, int) 메서드를 구현해야 합니다.
앱이 콜백을 수신하면 몇 초 이내에 stopSelf()를 호출해야 합니다. (앱을 즉시 중지하지 않으면 시스템에서 오류를 생성합니다.)
앱의 dataSync 및 mediaProcessing 서비스가 24시간 동안 총 6시간 이상 실행되지 않도록 합니다 (사용자가 앱과 상호작용하여 타이머를 재설정하는 경우는 제외).
직접적인 사용자 상호작용의 결과로만 dataSync 또는 mediaProcessing 포그라운드 서비스를 시작합니다. 서비스가 시작될 때 앱이 포그라운드에 있으므로 앱이 백그라운드로 전환된 후 서비스에 6시간이 부여됩니다.
이러한 포그라운드 서비스를 사용하는 대신 WorkManager와 같은 대체 API를 사용하세요. 특히 dataSync 포그라운드 서비스를 사용하는 대신 대체 API를 사용하는 것이 좋습니다.
앱의 dataSync 포그라운드 서비스가 지난 24시간 동안 6시간 실행된 경우 사용자가 앱을 포그라운드로 가져오지 않는 한 (타이머가 재설정됨) 다른 dataSync 포그라운드 서비스를 시작할 수 없습니다. 다른 dataSync 포그라운드 서비스를 시작하려고 하면 시스템에서 '포그라운드 서비스 유형 dataSync의 시간 제한이 이미 소진됨'과 같은 오류 메시지와 함께 ForegroundServiceStartNotAllowedException를 발생시킵니다.
테스트
앱이 Android 15를 타겟팅하지 않더라도 (앱이 Android 15 기기에서 실행되는 경우) 앱의 동작을 테스트하기 위해 데이터 동기화 제한 시간을 사용 설정할 수 있습니다. 타임아웃을 사용 설정하려면 다음 adb 명령어를 실행하세요.
이 페이지에 나와 있는 콘텐츠와 코드 샘플에는 콘텐츠 라이선스에서 설명하는 라이선스가 적용됩니다. 자바 및 OpenJDK는 Oracle 및 Oracle 계열사의 상표 또는 등록 상표입니다.
최종 업데이트: 2025-08-27(UTC)
[[["이해하기 쉬움","easyToUnderstand","thumb-up"],["문제가 해결됨","solvedMyProblem","thumb-up"],["기타","otherUp","thumb-up"]],[["필요한 정보가 없음","missingTheInformationINeed","thumb-down"],["너무 복잡함/단계 수가 너무 많음","tooComplicatedTooManySteps","thumb-down"],["오래됨","outOfDate","thumb-down"],["번역 문제","translationIssue","thumb-down"],["샘플/코드 문제","samplesCodeIssue","thumb-down"],["기타","otherDown","thumb-down"]],["최종 업데이트: 2025-08-27(UTC)"],[],[],null,["If an app targets Android 15 or higher, the system places\nrestrictions on how long certain foreground services are allowed to run while\nyour app is in the background. Currently, this restriction only applies to\n[`dataSync`](/develop/background-work/services/fgs/service-types#data-sync) and\n[`mediaProcessing` foreground service type](/develop/background-work/services/fgs/service-types#media-processing) foreground\nservices. There are more restrictive limits on the [`shortService` foreground\nservice type](/develop/background-work/services/fgs/service-types#short-service) which are discussed in that service type's\ndocumentation.\n\nTimeout behavior\n\nThe system permits `dataSync` and `mediaProcessing` foreground services to run\nfor a total of 6 hours in a 24-hour period, after which the system calls the\nrunning service's [`Service.onTimeout(int, int)`](/reference/android/app/Service#onTimeout(int,%20int)) method\n(introduced in Android 15). (The `mediaProcessing` foreground\nservice type was added in Android 15.) The six-hour time limit is\ntracked separately for `dataSync` and for `mediaProcessing` services. For\nexample, if a `dataSync` service just ran for one hour, the app would only have\nfive hours available for `dataSync` foreground services, but it would\nhave a full six hours available for `mediaProcessing` services.\n| **Note:** `shortService` foreground services have a more restrictive time limit. For more information, see the [short service documentation](/develop/background-work/services/fgs/service-types#short-service).\n\nWhen a foreground service reaches the six-hour limit, the service has a few\nseconds to call [`Service.stopSelf()`](/reference/android/app/Service#stopSelf()). When the system calls\n`Service.onTimeout()`, the service is no longer considered a foreground service.\nIf the service does not call `Service.stopSelf()`, the system throws an internal\nexception. The exception is logged in [Logcat](/tools/logcat) with the following\nmessage: \n\n Fatal Exception: android.app.RemoteServiceException: \"A foreground service of\n type [service type] did not stop within its timeout: [component name]\"\n\n| **Note:** The 6-hour time limit is shared by all of an app's foreground services of the specified type. For example, if an app runs a `dataSync` service for four hours, then starts a different `dataSync` service, that second service will only be allowed to run for two hours. However, if the user brings the app to the foreground, the timer resets and the app has 6 hours available.\n\nTo avoid problems with this behavior change, you can do one or more of the\nfollowing:\n\n1. Have your service implement the new `Service.onTimeout(int, int)` method. When your app receives the callback, make sure to call `stopSelf()` within a few seconds. (If you don't stop the app right away, the system generates a failure.)\n2. Make sure your app's `dataSync` and `mediaProcessing` services don't run for more than a total of 6 hours in any 24-hour period (unless the user interacts with the app, resetting the timer).\n3. Only start `dataSync` or `mediaProcessing` foreground services as a result of direct user interaction; since your app is in the foreground when the service starts, your service has the full six hours after the app goes to the background.\n4. Instead of using these foreground services, use an use an [alternative\n API](/develop/background-work/background-tasks#alternative-apis), like WorkManager. In particular, instead of using a `dataSync` foreground service, consider using an [alternative API](/develop/background-work/background-tasks/data-transfer-options).\n\nIf your app's `dataSync` foreground services have run for 6 hours in the last\n24, you cannot start another `dataSync` foreground service *unless* the user\nhas brought your app to the foreground (which resets the timer). If you try to\nstart another `dataSync` foreground service, the system throws\n[`ForegroundServiceStartNotAllowedException`](/reference/android/app/ForegroundServiceStartNotAllowedException)\nwith an error message like \"Time limit already exhausted for foreground service\ntype dataSync\".\n\nTesting\n\nTo test your app's behavior, you can enable data sync timeouts even if your app\nis not targeting Android 15 (as long as the app is running on an Android 15\ndevice). To enable timeouts, run the following [`adb`](/tools/adb) command: \n\n adb shell am compat enable FGS_INTRODUCE_TIME_LIMITS \u003cvar label=\"package-name\" translate=\"no\"\u003eyour-package-name\u003c/var\u003e\n\nYou can also adjust the timeout period, to make it easier to test how your\napp behaves when the limit is reached. To set a new timeout period for\n`dataSync` foreground services, run the following `adb` command: \n\n adb shell device_config put activity_manager data_sync_fgs_timeout_duration \u003cvar label=\"timeout-duration\" translate=\"no\"\u003eduration-in-milliseconds\u003c/var\u003e\n\nTo set a new timeout period for `mediaProcessing` foreground services, run this\ncommand: \n\n adb shell device_config put activity_manager media_processing_fgs_timeout_duration \u003cvar label=\"timeout-duration\" translate=\"no\"\u003eduration-in-milliseconds\u003c/var\u003e"]]