Android 9 (سطح API 28) و نسخه های بعدی از App Standby Buckets پشتیبانی می کند. سطلهای آماده به کار به سیستم کمک میکنند درخواستهای برنامهها برای منابع را براساس میزان اخیر و تعداد دفعات استفاده از برنامهها اولویتبندی کند. بر اساس الگوهای استفاده از برنامه، هر برنامه در یکی از پنج سطل اولویت قرار می گیرد. این سیستم منابع دستگاه در دسترس برای هر برنامه را بر اساس سطل برنامه محدود می کند.
سیستم به صورت پویا هر برنامه را به یک سطل اولویت اختصاص می دهد و برنامه ها را در صورت نیاز مجدداً اختصاص می دهد. این سیستم ممکن است به یک برنامه از پیش بارگذاری شده متکی باشد که از یادگیری ماشینی برای تعیین میزان احتمال استفاده از هر برنامه استفاده می کند و برنامه ها را به سطل های مناسب اختصاص می دهد.
اگر برنامه سیستم در دستگاهی موجود نباشد، سیستم به طور پیشفرض برنامهها را بر اساس اخیراً استفاده شده مرتب میکند. برنامه هایی که فعال تر هستند به سطل هایی اختصاص داده می شوند که به آنها اولویت بیشتری می دهند و منابع سیستم بیشتری را در اختیار برنامه قرار می دهند. به طور خاص، سطل تعیین میکند که کارهای برنامه چند بار اجرا میشوند و هر چند وقت یکبار برنامه میتواند آلارمها را ایجاد کند. این محدودیتها فقط زمانی اعمال میشوند که دستگاه از باتری استفاده میکند. در حالی که دستگاه در حال شارژ است، سیستم این محدودیت ها را اعمال نمی کند.
سطل های اولویت به شرح زیر است:
- فعال : برنامه در حال استفاده است یا اخیراً استفاده شده است.
- مجموعه کاری : برنامه در حال استفاده منظم است.
- مکرر : برنامه اغلب استفاده می شود اما نه روزانه.
- نادر : برنامه اغلب استفاده نمی شود.
- محدود شده : برنامه منابع زیادی از سیستم را مصرف می کند یا ممکن است رفتار نامطلوبی از خود نشان دهد.
علاوه بر این سطل های اولویت دار، یک سطل هرگز ویژه برای برنامه هایی که نصب شده اند اما هرگز اجرا نشده اند وجود دارد. این سیستم محدودیت های شدیدی را برای این برنامه ها اعمال می کند.
توضیحات زیر برای مورد غیر پیش بینی است. در مقابل، زمانی که پیشبینی از یادگیری ماشین برای پیشبینی رفتار استفاده میکند، سطلها با پیشبینی اقدامات بعدی کاربر انتخاب میشوند نه بر اساس استفاده اخیر. به عنوان مثال، یک برنامه اخیراً استفاده شده ممکن است در سطل کمیاب قرار گیرد زیرا یادگیری ماشینی پیش بینی می کند که برنامه ممکن است برای چندین ساعت استفاده نشود.
یک برنامه در زمانی که از آن استفاده می شود، اخیراً استفاده می شود یا هر یک از کارهای زیر را انجام می دهد، در سطل فعال است:
- فعالیتی را راه اندازی می کند.
- یک سرویس پیش زمینه طولانی مدت را اجرا می کند.
- توسط کاربر از یک اعلان ضربه زده می شود.
اگر برنامهای در سطل فعال باشد، سیستم هیچ محدودیتی برای کارها یا آلارمهای برنامه قائل نمیشود.
در اندروید 9 (سطح API 28) و بالاتر، وقتی کاربر به روشهای خاصی با برنامه شما تعامل دارد، سیستم به طور موقت برنامه شما را در سطل فعال قرار میدهد. پس از اینکه کاربر تعامل با برنامه شما را متوقف کرد، سیستم آن را بر اساس سابقه استفاده در یک سطل قرار می دهد.
در زیر نمونه هایی از فعل و انفعالاتی هستند که این رفتار سیستم را تحریک می کنند:
کاربر روی اعلانی که برنامه شما ارسال می کند ضربه می زند.
کاربر با ضربه زدن روی دکمه رسانه با یک سرویس پیش زمینه در برنامه شما تعامل دارد.
کاربر هنگام تعامل با سیستم عامل Android Automotive به برنامه شما متصل می شود، جایی که برنامه شما از یک سرویس پیش زمینه یا
CONNECTION_TYPE_PROJECTION
استفاده می کند.
اگر یک برنامه اغلب اجرا می شود اما فعال نیست، در سطل مجموعه کار قرار دارد. به عنوان مثال، یک برنامه رسانه اجتماعی که کاربر تقریباً هر روز راه اندازی می کند احتمالاً در مجموعه کار قرار دارد. اگر برنامهها بهطور غیرمستقیم استفاده شوند، به سطل مجموعه کار ارتقا مییابند.
اگر برنامهای در مجموعه کار باشد، سیستم محدودیتهای ملایمی را بر توانایی آن برای اجرای کارها و راهاندازی آلارم اعمال میکند. برای جزئیات، به محدودیتهای مدیریت نیرو مراجعه کنید.
اگر یک برنامه به طور منظم استفاده شود، اما نه لزوماً هر روز، در سطل مکرر قرار می گیرد. به عنوان مثال، یک برنامه ردیابی تمرین که کاربر در باشگاه اجرا می کند ممکن است در سطل مکرر باشد.
اگر برنامه ای در سطل مکرر قرار داشته باشد، سیستم محدودیت های قوی تری بر توانایی آن برای اجرای کارها و راه اندازی آلارم اعمال می کند. برای جزئیات، به محدودیتهای مدیریت نیرو مراجعه کنید.
اگر یک برنامه اغلب استفاده نشود، در سطل کمیاب قرار دارد. به عنوان مثال، یک برنامه هتل که کاربر فقط هنگام اقامت در آن هتل اجرا می کند، ممکن است در سطل کمیاب باشد.
اگر یک برنامه در سطل کمیاب باشد، سیستم محدودیتهای سختی را بر توانایی آن برای اجرای کارها و راهاندازی آلارم اعمال میکند. این سیستم همچنین توانایی برنامه برای اتصال به اینترنت را محدود می کند. برای جزئیات، به محدودیتهای مدیریت نیرو مراجعه کنید.
این سطل که در اندروید 12 (سطح API 31) اضافه شده است، کمترین اولویت و بیشترین محدودیت را در بین تمام سطل ها دارد. این سیستم رفتار برنامه شما را در نظر می گیرد، مانند اینکه کاربر چند وقت یکبار با آن تعامل دارد تا تصمیم بگیرد که آیا برنامه شما را در سطل محدود قرار دهد یا خیر.
در Android 13 (سطح API 33) و بالاتر، مگر اینکه برنامه شما واجد شرایط معافیت باشد، سیستم برنامه شما را در سطل محدود شده در شرایط زیر قرار میدهد:
کاربر برای چند روز مشخص با برنامه شما ارتباط برقرار نمی کند. در اندروید 12 (سطح API 31) و 12L (سطح API 32)، تعداد روزها 45 روز است. اندروید 13 تعداد روزها را به 8 کاهش می دهد.
برنامه شما در طول یک دوره 24 ساعته تعداد زیادی پخش یا اتصال را فراخوانی می کند.
اگر سیستم برنامه شما را در سطل محدود قرار می دهد، محدودیت های زیر اعمال می شود:
- شما می توانید کارها را یک بار در روز در یک جلسه دسته ای 10 دقیقه ای اجرا کنید . در طول این جلسه، سیستم مشاغل برنامه شما را با کارهای برنامه های دیگر گروه بندی می کند.
- مشاغل محدود به خودی خود اجرا نمی شوند. باید حداقل یک کار دیگر در حال اجرا یا معلق باشد که می تواند شامل هر کار دیگری باشد.
- برنامه شما میتواند کارهای سریع کمتری را در مقایسه با زمانی که سیستم برنامه شما را در یک سطل با محدودیت کمتر قرار میدهد اجرا کند.
- برنامه شما میتواند یک زنگ هشدار را در روز فراخوانی کند. این آلارم می تواند یک زنگ دقیق یا یک زنگ هشدار غیر دقیق باشد.
انواع برنامههای زیر حتی در اندروید ۱۲ و بالاتر از ورود به سطل محدود و دور زدن محرک عدم فعالیت معاف هستند:
- برنامه های دستگاه همراه
- برنامه های در حال اجرا بر روی دستگاه در حالت نمایشی
- برنامه های صاحب دستگاه
- برنامه های مالک نمایه
- برنامه های ماندگار
- برنامه های VPN
- برنامههایی که نقش
ROLE_DIALER
دارند - برنامه هایی که کاربر صراحتاً برای ارائه عملکرد "نامحدود" در تنظیمات سیستم تعیین کرده است
- برنامه هایی با ویجت های فعال
- برنامه هایی که حداقل یکی از مجوزهای زیر را دارند:
برای بررسی اینکه برنامه شما به کدام باکت اختصاص داده شده است، یکی از موارد زیر را انجام دهید:
با
getAppStandbyBucket()
تماس بگیرید.دستور زیر را در پنجره ترمینال اجرا کنید:
adb shell am get-standby-bucket PACKAGE_NAME
سیستم هر زمان که برنامه شما را در یک سطل آماده به کار برنامه قرار می دهد که مقدار آن از STANDBY_BUCKET_ACTIVE
بیشتر است (10) گاز می گیرد.
اگر برنامه شما بهترین روشها را برای Doze و آماده به کار برنامه دنبال میکند، ویژگیهای مدیریت انرژی بعدی دشوار نیستند. با این حال، برخی از رفتارهای برنامه که قبلاً به خوبی کار می کردند ممکن است مشکلاتی ایجاد کنند.
- سعی نکنید سیستم را برای قرار دادن برنامه خود در یک سطل خاص دستکاری کنید. روش سیستم برای قرار دادن اولویت می تواند تغییر کند و هر سازنده دستگاه ممکن است تصمیم بگیرد برنامه سطل خود را با الگوریتم خاص خود بنویسد. درعوض، مطمئن شوید که برنامه شما بدون توجه به اینکه در کدام سطل قرار دارد، رفتار مناسبی دارد.
- اگر برنامهای فعالیت راهاندازی نداشته باشد، ممکن است هرگز به سطل فعال ارتقا پیدا نکند. طراحی مجدد اپلیکیشن خود را برای داشتن چنین فعالیتی در نظر بگیرید.
اگر کاربران نتوانند با اعلانهای برنامه تعامل داشته باشند، کاربران نمیتوانند تبلیغ برنامه را به سطل فعال فعال کنند. در این مورد، طراحی مجدد برخی اعلانها را در نظر بگیرید که به کاربران اجازه تعامل میدهد. برای برخی از دستورالعملها، الگوهای طراحی اعلانهای طراحی مواد را ببینید.
اگر برنامه با دریافت یک پیام با اولویت بالا Firebase Cloud Messaging (FCM) اعلانی را نشان ندهد، کاربر نمیتواند با برنامه تعامل داشته باشد و در نتیجه آن را به سطل فعال ارتقا دهد. در واقع، تنها استفاده در نظر گرفته شده برای پیام های FCM با اولویت بالا، ارسال اعلان به کاربر است، بنابراین این وضعیت نباید رخ دهد. در 12L (سطح API 32) و پایینتر، اگر پیام FCM را بهطور نامناسب بهعنوان اولویت بالا علامتگذاری کنید، زمانی که تعامل کاربر را راهاندازی نمیکند، میتواند باعث شود که پیامهای آینده از اولویت برخوردار شوند.
اگر برنامهها در چندین بسته تقسیم شوند، آن بستهها ممکن است در سطلهای مختلف باشند و سطوح دسترسی متفاوتی داشته باشند. این برنامه ها را با بسته های اختصاص داده شده به سطل های مختلف تست کنید تا مطمئن شوید برنامه به درستی عمل می کند.