مستندات سرویس پیشزمینه، رفتار فعلی سرویسهای پیشزمینه اندروید را شرح میدهد. این مستندات، صرف نظر از اینکه آیا جدیدترین نسخه اندروید را هدف قرار میدهند یا خیر، راهنماییهایی در مورد بهترین شیوهها برای اکثر برنامهها ارائه میدهد.
این صفحه برخی از جدیدترین تغییرات مهم در سرویسهای پیشزمینه و پیامدهای آن برای برنامههایی که جدیدترین نسخه پلتفرم اندروید را هدف قرار نمیدهند، شرح میدهد. در بسیاری از موارد، بهترین شیوههایی که برای برنامههایی که سطوح API پایینتر را هدف قرار میدهند اختیاری بودند، برای برنامههایی که سطوح API بالاتر را هدف قرار میدهند، اجباری میشوند.
اندروید ۱۶ (سطح API ۳۶)
تغییرات زیر برای برنامههایی که روی اندروید ۱۶ یا بالاتر اجرا میشوند، صرف نظر از اینکه چه سطح API را هدف قرار میدهند، اعمال میشود:
کارهای پسزمینه که از یک سرویس پیشزمینه شروع میشوند، اکنون باید به سهمیههای زمان اجرای مربوطه خود پایبند باشند. این شامل کارهایی میشود که مستقیماً با
JobSchedulerبرنامهریزی شدهاند، و همچنین کارهایی که توسط کتابخانههای دیگر مانند WorkManager یاDownloadManagerایجاد شدهاند.برای انتقال داده در پاسخ به یک اقدام کاربر، استفاده از یک کار انتقال داده آغاز شده توسط کاربر را در نظر بگیرید. این کارها از سهمیههای کاری معمولی معاف هستند.
اندروید ۱۵ (سطح API ۳۵)
الزامات زیر برای برنامههایی که سطح API 35 یا بالاتر را هدف قرار میدهند، اعمال میشود:
- محدودیتهای جدیدی در مورد مدت زمان اجرای سرویس پیشزمینه
dataSyncوجود دارد. این محدودیتها در بخش «رفتار وقفه سرویس پیشزمینه » توضیح داده شدهاند. محدودیتهای مشابهی در مورد نوع سرویس پیشزمینهmediaProcessing(که در اندروید ۱۵ جدید است) نیز اعمال میشود. - سرویسهای پیشزمینه
BOOT_COMPLETEDدیگر مجاز به راهاندازی برخی سرویسهای پیشزمینه نیستند . - برنامههایی که مجوز
SYSTEM_ALERT_WINDOWرا دارند، فقط در صورتی مجاز به اجرای سرویسهای پیشزمینه از پسزمینه هستند که در حال حاضر یک پنجرهی همپوشان قابل مشاهده داشته باشند (یا اگر یکی از معافیتهای دیگر از محدودیتهای شروع پسزمینه را داشته باشند). پیش از این، معافیت برای این برنامهها گستردهتر بود.
اندروید ۱۴ (سطح API ۳۴)
الزامات زیر برای برنامههایی که سطح API 34 یا بالاتر را هدف قرار میدهند، اعمال میشود:
- شما باید تمام سرویسهای پیشزمینه را به همراه نوع سرویس آنها اعلان کنید .
- برنامهها باید نوع مجوز مناسب برای نوع کاری که سرویس پیشزمینه انجام خواهد داد را درخواست کنند. هر نوع سرویس پیشزمینه یک نوع مجوز متناظر دارد. برای مثال، اگر برنامهای یک سرویس پیشزمینه را که از دوربین استفاده میکند، راهاندازی کند، باید مجوزهای
FOREGROUND_SERVICEوFOREGROUND_SERVICE_CAMERAرا درخواست کنید. اگر برنامهای سطح API 34 یا بالاتر را هدف قرار دهد و مجوز خاص مناسب را درخواست نکند، سیستم یکSecurityExceptionصادر میکند.
اندروید ۱۲ (سطح API ۳۱)
الزامات زیر برای برنامههایی که سطح API 31 یا بالاتر را هدف قرار میدهند، اعمال میشود:
- برنامهها مجاز نیستند در حالی که برنامه در پسزمینه است، سرویسهای پیشزمینه را راهاندازی کنند، به جز چند استثنای خاص. برای اطلاعات بیشتر و اطلاعات مربوط به استثنائات این قانون، به محدودیتهای شروع یک سرویس پیشزمینه از پسزمینه مراجعه کنید.
اندروید ۱۱ (سطح API 30)
الزامات زیر برای برنامههایی که سطح API 30 یا بالاتر را هدف قرار میدهند، اعمال میشود:
- اگر سرویسهای پیشزمینه یک برنامه از دوربین یا میکروفون استفاده کنند، برنامه باید سرویس را به ترتیب با نوع سرویس
cameraیاmicrophoneاعلام کند.
اندروید ۱۰ (سطح API ۲۹)
الزامات زیر برای برنامههایی که سطح API 29 یا بالاتر را هدف قرار میدهند، اعمال میشود:
- اگر سرویسهای پیشزمینه یک برنامه از اطلاعات موقعیت مکانی استفاده کنند، برنامه باید سرویس را با نوع سرویس
locationاعلام کند.
اندروید ۹ (سطح API 28)
اندروید ۹ مجوز FOREGROUND_SERVICE را معرفی کرد. برنامههایی که در اندروید ۹ اجرا میشوند و از سرویسهای پیشزمینه استفاده میکنند، باید این مجوز را داشته باشند.
اگر برنامهای که سطح API آن ۲۸ یا بالاتر است، بدون درخواست مجوز FOREGROUND_SERVICE سعی در ایجاد یک سرویس پیشزمینه داشته باشد، سیستم یک SecurityException صادر میکند.