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

برنامه هایی که 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

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

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

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

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

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

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

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

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

اندروید

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


۷۵۴
۰
۲۹ آبان ۱۳۹۹

بک لینک چیست؟

بک لینک (Back Link) به لینک دادن یک سایت به سایت دیگر گفته میشود که یک فاکتور مهم و اساسی در سئو هر سایتی می باشد.


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

وردپرس

وردپرس یک سیستم مدیریت محتوای قوی می باشد که با استفاده از آن می توان وب سایت ها و وبلاگ های گوناگونی با هر شرایطی را طراحی کرد چرا که این سیستم و ...


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

جاوا اسکریپت

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


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