Android 9 (سطح میانای برنامهسازی کاربردی ۲۸) و نسخههای جدیدتر از دستههای حالت آماده بهکار برنامه پشتیبانی میکنند. حالت آماده بهکار برنامه دستهها به سیستم کمک میکنند تا درخواستهای برنامهها برای منابع را براساس اینکه برنامهها اخیراً و چند بار استفاده شدهاند اولویتبندی کند. براساس الگوهای استفاده از برنامه، هر برنامه در یکی از پنج دسته اولویت قرار میگیرد. سیستم منابع دستگاه دردسترس هر برنامه را براساس اینکه برنامه در کدام دسته قرار دارد محدود میکند.
سطلهای اولویتدار
سیستم بهطور پویا هر برنامه را به یک دسته اولویت اختصاص میدهد و درصورت نیاز برنامهها را دوباره اختصاص میدهد. سیستم ممکن است به برنامه ازپیش بارشدهای متکی باشد که از یادگیری ماشین برای تعیین احتمال استفاده از هر برنامه استفاده میکند و برنامهها را به دستههای مناسب اختصاص میدهد.
اگر برنامه سیستم در دستگاه وجود نداشته باشد، سیستم بهطور پیشفرض برنامهها را براساس اینکه اخیراً استفاده شدهاند مرتب میکند. برنامههایی که فعالتر هستند به دستههایی اختصاص داده میشوند که اولویت بالاتری به آنها میدهد و منابع سیستم بیشتری را دردسترس برنامه قرار میدهد. بهطور خاص، دسته تعیین میکند که کارهای برنامه با چه تناوبی اجرا شوند و برنامه با چه تناوبی بتواند زنگهای هشدار را فعال کند. این محدودیتها فقط زمانی اعمال میشود که دستگاه با باتری کار کند. وقتی دستگاه درحال شارژ شدن است، سیستم این محدودیتها را اعمال نمیکند.
دستههای اولویت عبارتاند از:
- فعال: برنامه درحال استفاده است یا اخیراً استفاده شده است.
- مجموعه کاری: برنامه بهطور منظم استفاده میشود.
- مکرر: برنامه اغلب استفاده میشود اما نه هر روز.
- بهندرت: برنامه بهطور مکرر استفاده نمیشود.
- محدودشده: برنامه منابع سیستم زیادی مصرف میکند یا ممکن است رفتار نامطلوبی نشان دهد.
علاوهبر این دستههای اولویت، دسته ویژه هرگز برای برنامههایی وجود دارد که نصب شدهاند اما هرگز اجرا نشدهاند. سیستم محدودیتهای شدیدی بر این برنامهها اعمال میکند.
توضیحات زیر برای حالت غیرپیشبینی است. درمقابل، وقتی پیشبینی از یادگیری ماشین برای پیشبینی رفتار استفاده میکند، دستهها براساس پیشبینی کنشهای بعدی کاربر انتخاب میشوند، نه براساس استفاده اخیر. برای مثال، ممکن است برنامهای که اخیراً استفاده شده است درنهایت در دسته «بهندرت» قرار گیرد زیرا یادگیری ماشین پیشبینی میکند که ممکن است از این برنامه تا چند ساعت استفاده نشود.
فعال
برنامه درحین استفاده، یا زمانی که بهتازگی استفاده شده است، یا وقتی هریک از کارهای زیر را انجام میدهد، در دسته فعال قرار میگیرد:
- فعالیتی را راهاندازی میکند.
- سرویس پیشزمینهای طولانیمدت را اجرا میکند.
- کاربر روی آن در اعلان تکضرب زده باشد.
اگر برنامهای در سطل فعال باشد، سیستم حداقل محدودیتها را روی کارها یا هشدارهای برنامه اعمال میکند:
- از Android 16 (سطح API ۳۶)، کارهای پسزمینه اگر توسط برنامهای در سطل فعال شروع شوند، سهمیه زمان اجرای سخاوتمندانهای دارند.
این شامل کارهای زمانبندیشده مستقیماً با
JobScheduler، و همچنین کارهای ایجادشده توسط کتابخانههای دیگر مانند WorkManager یاDownloadManagerمیشود.
تعامل کاربر برنامهها را بهعنوان فعال اختصاص میدهد
در Android 9 (سطح API ۲۸) و بالاتر، وقتی کاربر به روشهای خاصی با برنامه شما تعامل برقرار میکند، سیستم بهطور موقت برنامه شما را در دسته فعال قرار میدهد. پساز اینکه کاربر تعامل با برنامه شما را متوقف کرد، سیستم آن را براساس سابقه استفاده در یک دسته قرار میدهد.
موارد زیر نمونههایی از تعاملاتی هستند که این رفتار سیستم را فعال میکنند:
کاربر روی اعلانی که برنامهتان ارسال میکند ضربه میزند.
کاربر با تکضرب زدن روی دکمه رسانه با سرویس پیشزمینهای در برنامه شما تعامل برقرار میکند.
کاربر هنگام تعامل با Android Automotive OS به برنامه شما متصل میشود، جایی که برنامه شما از سرویس پیشزمینهای یا
CONNECTION_TYPE_PROJECTIONاستفاده میکند.
مجموعه کاری
اگر برنامهای اغلب اجرا شود اما فعال نباشد، در دسته مجموعه کاری قرار میگیرد. برای مثال، برنامه رسانههای اجتماعی که کاربر تقریباً هر روز آن را راهاندازی میکند احتمالاً در مجموعه کاری قرار میگیرد. اگر برنامهها بهطور غیرمستقیم استفاده شوند، به دسته مجموعه کاری نیز ارتقا مییابند.
اگر برنامهای در مجموعه کاری باشد، سیستم محدودیتهای خفیفی بر توانایی آن برای اجرای کارها و فعال کردن زنگهای هشدار اعمال میکند. برای جزئیات، محدودیتهای منابع مدیریت مصرف برق را ببینید.
مخاطبین همیشگی
اگر برنامهای بهطور منظم اما نه لزوماً هر روز استفاده شود، در دسته مکرر قرار میگیرد. برای مثال، برنامه ردیابی تمرین که کاربر در باشگاه اجرا میکند ممکن است در دسته مکرر قرار گیرد.
اگر برنامهای در دسته «مکرر» باشد، سیستم محدودیتهای قویتری بر توانایی آن برای اجرای کارها و فعال کردن هشدارها اعمال میکند. برای جزئیات، محدودیتهای منابع مدیریت مصرف برق را ببینید.
نادر
اگر برنامهای بهندرت استفاده شود، در دسته بهندرت قرار میگیرد. برای مثال، برنامه هتل که کاربر فقط هنگام اقامت در آن هتل اجرا میکند ممکن است در دسته بهندرت قرار گیرد.
اگر برنامهای در دسته «بهندرت» باشد، سیستم محدودیتهای سختی بر توانایی آن برای اجرای کارها و فعال کردن هشدارها اعمال میکند. سیستم همچنین توانایی برنامه را برای اتصال به اینترنت محدود میکند. برای جزئیات، محدودیتهای منابع مدیریت مصرف برق را ببینید.
محدود
این دسته که در Android 12 (سطح میانای برنامهسازی کاربردی ۳۱) اضافه شده است، کمترین اولویت و بیشترین محدودیت را در بین همه دستهها دارد. سیستم رفتار برنامهتان را درنظر میگیرد، مثلاً اینکه کاربر چندوقت یکبار با آن تعامل میکند، تا تصمیم بگیرد برنامهتان را در دسته محدودشده قرار دهد یا نه.
در Android نسخه ۱۳ (سطح میانای برنامهسازی کاربردی ۳۳) و بالاتر، بهجز در مواردی که برنامه شما واجدشرایط معافیت باشد، سیستم برنامه شما را در شرایط زیر در دسته محدودشده قرار میدهد:
کاربر برای تعداد مشخصی روز با برنامهتان تعامل نداشته باشد. در Android 12 (سطح میانای برنامهسازی کاربردی ۳۱) و 12L (سطح میانای برنامهسازی کاربردی ۳۲)، تعداد روزها ۴۵ است. Android 13 این تعداد روز را به ۸ کاهش میدهد.
برنامه شما تعداد زیادی پخش یا اتصال را درطول یک دوره ۲۴ ساعته فراخوانی میکند.
اگر سیستم برنامهتان را در دسته محدودشده قرار دهد، محدودیتهای زیر اعمال میشود:
- میتوانید کارها را یک بار در روز در یک جلسه دستهای ۱۰ دقیقهای اجرا کنید. درطول
این جلسه، سیستم کارهای برنامهتان را با کارهای برنامههای دیگر گروهبندی میکند.
- کارهای محدودشده بهخودیخود اجرا نمیشوند. باید حداقل یک کار دیگر درحال اجرا یا درانتظار بهطور همزمان وجود داشته باشد که میتواند شامل هر کار دیگری باشد.
- برنامه شما میتواند کارهای تسریعشده کمتری را اجرا کند، درمقایسه با زمانی که سیستم برنامه شما را در دسته محدودکنندهتری قرار میدهد.
- برنامه شما میتواند یک زنگ ساعت در روز فراخوانی کند. این زنگ ساعت میتواند زنگ ساعت دقیق یا زنگ ساعت غیردقیق باشد.
معافیت از سطل محدودشده
انواع برنامههای زیر از ورود به دسته محدودشده معاف هستند و حتی در Android نسخه ۱۲ و بالاتر، راهانداز عدم فعالیت را دور میزنند:
- برنامههای دستگاه همپا
- برنامههایی که در دستگاهی در حالت نمایشی اجرا میشوند
- برنامههای مالک دستگاه
- برنامههای مالک نمایه
- برنامههای دائمی
- برنامههای ویپیان
- برنامههایی که نقش
ROLE_DIALERدارند - برنامههایی که کاربر صریحاً در تنظیمات سیستم تعیین کرده است تا عملکرد «نامحدود» ارائه دهند
- برنامههای دارای ابزاره فعال
- برنامههایی که حداقل یکی از اجازههای زیر به آنها اعطا شده است:
ارزیابی دسته اولویت
برای بررسی اینکه برنامهتان به کدام دسته اختصاص داده شده است، یکی از کارهای زیر را انجام دهید:
با
getAppStandbyBucket()تماس بگیرید.فرمان زیر را در پنجره ترمینال اجرا کنید:
adb shell am get-standby-bucket PACKAGE_NAME
سیستم هرگاه برنامهتان در «دسته آمادهبهکار برنامه» قرار بگیرد،
آن را محدود میکند که مقدار آن بیشتر از STANDBY_BUCKET_ACTIVE (۱۰) است.
روالهای مطلوب
اگر برنامهتان از روالهای مطلوب برای «چرت زدن» و «حالت آمادهبهکار برنامه» پیروی میکند، ویژگیهای مدیریت مصرف برق بعدی دشوار نیستند. بااینحال، برخیاز رفتارهای برنامه که قبلاً بهخوبی کار میکردند ممکن است مشکلاتی ایجاد کنند.
- سعی نکنید سیستم را دستکاری کنید تا برنامهتان را در دسته خاصی قرار دهد. روش سیستم برای اولویتبندی میتواند تغییر کند و هر سازنده دستگاه ممکن است تصمیم بگیرد برنامه دستهبندی خودش را با الگوریتم خودش بنویسد. درعوض، مطمئن شوید که برنامهتان بدون توجه به اینکه در کدام دسته قرار دارد، رفتار مناسبی داشته باشد.
- اگر برنامهای فعالیت راهانداز نداشته باشد، ممکن است هرگز به سطل فعال ارتقا داده نشود. بهتر است برنامهتان را طوری بازطراحی کنید که چنین فعالیتی داشته باشد.
اگر کاربران نتوانند با اعلانهای برنامه تعامل داشته باشند، نمیتوانند برنامه را به دسته فعال ارتقا دهند. در این مورد، طراحی مجدد برخیاز اعلانهایی را که به کاربران اجازه تعامل میدهند درنظر بگیرید. برای برخیاز دستورالعملها، الگوهای طراحی اعلانها در Material Design را ببینید.
اگر برنامه پساز دریافت پیام
RemoteNotification«پیامرسانی ابری Firebase» (FCM) اعلانی نشان ندهد، کاربر نمیتواند با برنامه تعامل داشته باشد و بنابراین آن را به سطل فعال ارتقا دهد. درواقع، تنها کاربرد درنظرگرفتهشده برایRemoteNotificationارسال اعلان لحظهای به کاربر است، بنابراین این وضعیت نباید رخ دهد. برای استفاده از این نوع پیامها، اجرای خطمشی وجود دارد: پنجره اجرای ۲۰ ثانیهای که به اعلان اصلی برمیگردد. اگر برنامه در پیشزمینه باشد یا کاربر اجازه اجرا در پسزمینه را بدهد، اجرایی وجود ندارد.اگر برنامهها در چند بسته تقسیم شده باشند، ممکن است آن بستهها در دستههای مختلفی باشند و سطوح دسترسی متفاوتی داشته باشند. این برنامهها را با بستههای اختصاصدادهشده به دستههای مختلف آزمایش کنید تا مطمئن شوید برنامه بهدرستی رفتار میکند.