محدودیت های راه اندازی سرویس پیش زمینه

برنامه هایی که Android 12 را هدف قرار می دهند، به جز موارد خاص دیگر نمی توانند خدمات پیش زمینه را در حالی که در پس زمینه اجرا می شوند، اجرا کنند، اگر برنامه ای در پس زمینه در حال اجرا باشد برنامه ای در پیش زمینه  سعی در راه اندازی سرویس دارد و سرویس پیش زمینه استثنایی برای اجرا کردن دقیق اپ یا برنامه قائل نیست، در نتیجه سیستم کد زیر را اجرا می کند ForegroundServiceStartNotAllowedException .
توجه: اگر یک برنامه با  Context.startForegroundService() تماس بگیرد تا یک سرویس پیش زمینه را که برنامه دیگری متعلق به آن است شروع کند، محدودیت های توصیف شده در این صفحه فقط درصورتی که هر دو برنامه Android 12 باشند، اعمال می شوند.
Work Manager گزینه پیشنهادی برای خدمات پیش زمینه
اگر برنامه شما تحت تأثیر این تغییر قرار بگیرد، با استفاده از WorkManager مشکل قابل حل است. WorkManager راه حل پیشنهادی برای شروع کارهای پس زمینه با اولویت بالاتر است.
با شروع کار در WorkManager 2.7.0 ، برنامه شما می تواند setExpedited()  را اعمال کند و یک  Worker باید expedited job استفاده کند. این API جدید هنگام کار با Android 12 از مشاغل سریع استفاده می کند، و API برای ایجاد سازگاری از خدمات پیش زمینه در نسخه های قبلی Android استفاده می کند.
کد زیر مثالی از نحوه استفاده از روش setExpedited()  را نشان می دهد:
OneTimeWorkRequestBuilder<T>().apply {
    setInputData(inputData)
    setExpedited(OutOfQuotaPolicy.RUN_AS_NON_EXPEDITED_WORK_REQUEST)
}.build()
OneTimeWorkRequest request = new OneTimeWorkRequestBuilder<T>()
    .setInputData(inputData)
    .setExpedited(OutOfQuotaPolicy.RUN_AS_NON_EXPEDITED_WORK_REQUEST)
    .build();
از آنجا که روش های CoroutineWorker.setForeground()  و ListenableWorker.setForegroundAsync()  توسط خدمات پیش زمینه پشتیبانی می شوند، مشمول همان محدودیت ها و معافیت های راه اندازی سرویس پیش زمینه می شوند. شما می توانید ازمنفعت API استفاده کنید، اما اگر سیستم از برنامه شما برای شروع سرویس پیش زمینه جلوگیری کند، آماده مدیریت استثنا باشید. برای داشتن تجربه سازگارتر، از setExpedited()  استفاده کنید.   
Expedited jobs
Expedited jobs جدید درAndroid 12، به برنامه ها امکان می دهد کارهای کوتاه و مهم را در حالی که به سیستم کنترل منابع بهتری دسترسی دارند انجام دهند. این مشاغل مجموعه ای از ویژگی ها را در جایی بین سرویس پیش زمینه و یک کار منظم JobScheduler دارند:
در اینجا منظور این است که کارهای کوتاه در عرض چند دقیقه کامل می شوند. اگر برنامه شما سهمیه کافی نداشته باشد، اگر کار حداقل 3 دقیقه در حال اجرا باشد، سیستم ممکن است یک کار سریع را متوقف کند.
برخی از محدودیت های مدیریت انرژی سیستم ، از جمله صرفه جویی در باتری و دوز، کمتر تحت تأثیر آنها قرار می گیرند.
سیستم بلافاصله آنها را اجرا می کند، مشروط بر اینکه بار کاری فعلی سیستم انجام این کار را ممکن کند.
مشاغل سریع ممکن است به تعویق بیفتد
این سیستم سعی دارد یک کار تسریع شده معین را در اسرع وقت پس از فراخوان کار اجرا کن. با این حال، همانطور که در مورد سایر مشاغل وجود دارد، سیستم ممکن است شروع کارهای جدید سریع را به تعویق بیندازد، مانند موارد زیر:
بارگذاری سیستم بسیار زیاد است، این ممکن است درصورتی که مشاغل زیادی در حال اجرا هستند یا حافظه کافی در سیستم وجود ندارد، رخ دهد.
از حد سهمیه شغلی تسریع شده عبور کرده است. مشاغل سریع از یک سیستم سهمیه بندی استفاده می کنند که مبتنی بر سطل های آماده به کار برنامه است و حداکثر زمان اجرای آن را در یک پنجره زمان نورد محدود می کند. سهمیه های مورد استفاده برای مشاغل سریع محدودتر از سهمیه هایی است که برای سایر مشاغل پیش زمینه استفاده می شود.
تأثیرات روی مدیریت هشتارهای  API
به طور کلی، برنامه هایی که اندروید 12 را دارند نمی توانند با استفاده از زنگ ساعت، خدمات پیش زمینه را شروع کنند.
برای پشتیبانی از مواردی که برنامه ها باید زنگ هشدارها یا یادآوری های حساس به زمان را برای کاربران ارسال کنند، با خاموش شدن دقیق هشدارها، می توانید خدمات پیش زمینه را شروع کنید برای تنظیم دقیق هشدارها، برنامه شما باید گزینه  SCHEDULE_EXACT_ALARM را فعال کند.
در شرایط زیر، برنامه شما می تواند خدمات پیش زمینه را شروع کند حتی زمانی که برنامه شما در پس زمینه اجرا می شود:
برنامه شما از یک وضعیت قابل مشاهده توسط کاربر، مانند یک فعالیت، انتقال می یابد.
برنامه شما می تواند فعالیتی را در پس زمینه شروع کند، مگر در مواردی که برنامه دیگری در حال اجرا باشد.
برنامه شما با استفاده از پیام Firebase Cloud Messaging با اولویت بالا دریافت می کند.
کاربر در مورد UI مربوط به برنامه شما عملیاتی را انجام می دهد. به عنوان مثال، آنها ممکن است با یک bubble, notification, widget یا فعالیت ارتباط برقرار کنند.
برنامه شما رویدادی را دریافت می کند که مربوط به حصارکشی یا انتقال تشخیص فعالیت است.
پس از راه اندازی مجدد دستگاه و دریافت اقدام ACTION_BOOT_COMPLETED ، ACTION_LOCKED_BOOT_COMPLETED یا ACTION_MY_PACKAGE_REPLACED در گیرنده پخش.
برنامه شما اقدام ACTION_TIMEZONE_CHANGED، ACTION_TIME_CHANGED یا ACTION_LOCALE_CHANGED را در یک گیرنده پخش دریافت می کند.
برنامه شما پخش بلوتوثی را دریافت می کند که به مجوزهای BLUETOOTH_CONNECT یا BLUETOOTH_SCAN نیاز دارد.
برنامه هایی با نقش یا مجوز خاص سیستم، مانند دارندگان دستگاه و دارندگان نمایه.
برنامه شما از Companion Device Manager استفاده می کند.
سیستم یک سرویس پیش زمینه “sticky” را دوباره راه اندازی می کند. برای اینکه یک سرویس پیش زمینه sticky شود، START_STICKY یا START_REDELIVER_INTENT را از onStartCommand () برگردانید.
کاربر بهینه سازی باتری را برای برنامه شما خاموش می کند. شما می توانید با ارسال اطلاعات برنامه و تنظیمات سیستم به کاربر خود در یافتن این گزینه کمک کنید. برای این کار ، فرایندی را فراخوانی کنید که شامل اقدام ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS باشد.

دیدگاه‌ها و پرسش‌ها

برای ارسال نظر نیاز است تا ابتدا وارد سایت شوید.

هیچ نظری ارسال نشده است.

قیمت آموزش
رایگان
نوع دسترسی
رایگان

این مقاله در حال حاضر تنها به روش رایگان در دسترس می باشد.

golaleh hoseini
مدرس دوره

golaleh hoseini

مدرس دوره های سِون کلونر

گفتگوی برنامه نویسان

بخشی برای حل مشکلات برنامه‌نویسی و مباحث پیرامون آن

دوره های پیشنهادی

مقالات پیشنهادی

پی اچ پی - PHP

با استفاده از این زبان می توان وب سایت های پویا طراحی کرد, این زبان می تواند با HTML ادغام شود, در حقیقت یک زبان اسکریپتی متن باز و رایگان است. یعنی زمانی که سرور درخواست ...


۹۴۶
۰
۱۳ آذر ۱۳۹۹

درباره فایل Robots.txt

این فایل ربات های خزنده موتور های جستجو را راهنمایی می کنند و به آنان می فهماند که چه دایرکتوری و لینک هایی قابل بررسی و چه دایرکتوری و لینک هایی غیرقابل برررسی می باشند...


۷۵۵
۰
۲ دی ۱۳۹۹

نود جی اس

توسعه دهندگان نود جی اس, زبان جاوا اسکریپت را از یک زبان قابل اجرا در مرورگر خارج کرده و به زبانی تبدیل کردن که بتوان آن را بصورت یه اپلیکیشن مستفل اجرا کرد و ...


۹۱۲
۰
۱۲ آذر ۱۳۹۹

جاوا اسکریپت

جاوا اسکریپت یک زبان پویا و محبوب مبتنی بر شیء, داینامیک و مفسری می باشد. این زبان برای برنامه نویسی سمت سرور و کلاینت استفاده میشود که ...


۸۶۸
۰
۱۳ آذر ۱۳۹۹