تنظيم صفحاتك في مجموعات
يمكنك حفظ المحتوى وتصنيفه حسب إعداداتك المفضّلة.
إذا كان التطبيق يستهدف الإصدار 15 من نظام التشغيل Android أو الإصدارات الأحدث، يفرض النظام قيودًا على المدة التي يُسمح فيها بتشغيل بعض الخدمات التي تعمل في المقدّمة أثناء عمل تطبيقك في الخلفية. في الوقت الحالي، ينطبق هذا القيد فقط على الخدمات التي تعمل في المقدّمة من النوعين dataSync وmediaProcessing. تتوفّر قيود أكثر صرامة على نوع الخدمة shortServiceالتي تعمل في المقدّمة، ويتم توضيحها في مستندات نوع الخدمة هذا.
سلوك المهلة
يسمح النظام بتشغيل الخدمات التي تعمل في المقدّمة من النوعين dataSync وmediaProcessing لمدة 6 ساعات إجمالاً خلال فترة 24 ساعة، وبعد ذلك يستدعي النظام طريقة Service.onTimeout(int, int) الخاصة بالخدمة قيد التشغيل (تم طرحها في نظام التشغيل Android 15). (تمت إضافة mediaProcessingنوع الخدمة التي تعمل في المقدّمة في Android 15). يتم تتبُّع المهلة الزمنية البالغة ست ساعات بشكل منفصل لكل من خدمات dataSync وmediaProcessing. على سبيل المثال، إذا تم تشغيل خدمة dataSync لمدة ساعة واحدة فقط، سيتبقى للتطبيق خمس ساعات فقط متاحة لخدمات dataSync التي تعمل في المقدّمة، ولكن سيتوفر له ست ساعات كاملة لخدمات mediaProcessing.
عندما تصل خدمة تعمل في المقدّمة إلى الحدّ الأقصى البالغ ست ساعات، يكون أمام الخدمة بضع ثوانٍ لاستدعاء 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 في تطبيقك لا تعملان لمدة تزيد عن 6 ساعات إجمالاً خلال أي فترة 24 ساعة (ما لم يتفاعل المستخدم مع التطبيق، ما يؤدي إلى إعادة ضبط المؤقت).
لا تبدأ خدمات dataSync أو mediaProcessing التي تعمل في المقدّمة إلا نتيجةً لتفاعل مباشر من المستخدم، وبما أنّ تطبيقك يكون في المقدّمة عند بدء الخدمة، ستتوفّر لخدمتك مدة ست ساعات كاملة بعد انتقال التطبيق إلى الخلفية.
بدلاً من استخدام هذه الخدمات التي تعمل في المقدّمة، استخدِم واجهة برمجة تطبيقات بديلة، مثل WorkManager. على وجه الخصوص، بدلاً من استخدام dataSyncخدمة تعمل في المقدّمة، يمكنك استخدام واجهة برمجة تطبيقات بديلة.
إذا تم تشغيل خدمات dataSync التي تعمل في المقدّمة في تطبيقك لمدة 6 ساعات خلال آخر 24 ساعة، لن تتمكّن من بدء تشغيل خدمة أخرى من خدمات dataSync التي تعمل في المقدّمة إلا إذا نقل المستخدم تطبيقك إلى المقدّمة (ما يؤدي إلى إعادة ضبط المؤقت). إذا حاولت بدء dataSync خدمة أخرى تعمل في المقدّمة، سيُظهر النظام
ForegroundServiceStartNotAllowedException
مع رسالة خطأ مثل "انتهت المهلة المحدّدة لنوع الخدمة التي تعمل في المقدّمة dataSync".
الاختبار
لاختبار سلوك تطبيقك، يمكنك تفعيل مهلات مزامنة البيانات حتى إذا كان تطبيقك لا يستهدف الإصدار 15 من نظام التشغيل Android (طالما أنّ التطبيق يعمل على جهاز Android 15). لتفعيل مهلات الاستجابة، شغِّل الأمر التالي adb:
يمكنك أيضًا تعديل فترة المهلة لتسهيل اختبار سلوك تطبيقك عند بلوغ الحدّ الأقصى. لضبط فترة مهلة جديدة dataSync للخدمات التي تعمل في المقدّمة، شغِّل الأمر adb التالي:
يخضع كل من المحتوى وعيّنات التعليمات البرمجية في هذه الصفحة للتراخيص الموضحّة في ترخيص استخدام المحتوى. إنّ Java وOpenJDK هما علامتان تجاريتان مسجَّلتان لشركة Oracle و/أو الشركات التابعة لها.
تاريخ التعديل الأخير: 2025-08-27 (حسب التوقيت العالمي المتفَّق عليه)
[[["يسهُل فهم المحتوى.","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 (حسب التوقيت العالمي المتفَّق عليه)"],[],[],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"]]