اندروید 9 (سطح API 28) ویژگی های جدیدی را برای بهبود مدیریت انرژی دستگاه معرفی می کند. این تغییرات، همراه با ویژگیهایی که قبلاً در نسخههای قبلی وجود داشت، کمک میکند تا اطمینان حاصل شود که منابع سیستم در اختیار برنامههایی قرار میگیرد که بیشتر به آنها نیاز دارند.
ویژگی های مدیریت قدرت به دو دسته تقسیم می شوند:
- سطل های آماده به کار برنامه
- این سیستم دسترسی برنامه ها را به منابع دستگاه مانند CPU یا باتری بر اساس الگوهای استفاده کاربر محدود می کند. این یک ویژگی جدید برای اندروید 9 است.
- بهبود صرفه جویی در باتری
- وقتی بهینهسازی باتری روشن است، سیستم محدودیتهایی را برای همه برنامهها اعمال میکند. این یک ویژگی موجود است که با اندروید 9 بهبود یافته است.
سطل های آماده به کار برنامه
اندروید 9 یک ویژگی جدید مدیریت باتری، App Standby Buckets را معرفی می کند. App Standby Buckets به سیستم کمک میکند تا درخواستهای برنامهها برای منابع را براساس میزان اخیر و تعداد دفعات استفاده از برنامهها اولویتبندی کند. بر اساس الگوهای استفاده از برنامه، هر برنامه در یکی از پنج سطل اولویت قرار می گیرد. این سیستم منابع دستگاه در دسترس برای هر برنامه را بر اساس سطل برنامه محدود می کند.
این پنج سطل برنامهها را با ویژگیهای زیر به گروههایی اولویتبندی میکنند:
- فعال
اگر کاربر در حال حاضر از برنامه استفاده می کند، یک برنامه در سطل فعال است، به عنوان مثال:
- برنامه فعالیتی را راه اندازی کرده است
- این برنامه یک سرویس پیش زمینه را اجرا می کند
- این برنامه دارای یک آداپتور همگام سازی مرتبط با ارائه دهنده محتوا است که توسط یک برنامه پیش زمینه استفاده می شود
- کاربر روی یک اعلان از برنامه کلیک می کند
اگر برنامهای در سطل فعال باشد، سیستم هیچ محدودیتی برای کارهای برنامه، آلارمها یا پیامهای FCM قائل نمیشود.
- مجموعه کاری
اگر یک برنامه اغلب اجرا شود اما در حال حاضر فعال نیست، در سطل مجموعه کار قرار دارد. به عنوان مثال، یک برنامه رسانه اجتماعی که کاربر بیشتر روزها راه اندازی می کند، احتمالاً در مجموعه کار قرار دارد. اگر برنامهها بهطور غیرمستقیم استفاده شوند، به سطل مجموعه کار ارتقا مییابند.
اگر برنامهای در مجموعه کار باشد، سیستم محدودیتهای ملایمی را بر توانایی آن برای اجرای کارها و راهاندازی آلارم اعمال میکند. برای جزئیات، به محدودیتهای مدیریت نیرو مراجعه کنید.
- مکرر
اگر یک برنامه به طور منظم استفاده شود، اما نه لزوماً هر روز، در سطل مکرر قرار می گیرد. به عنوان مثال، یک برنامه ردیابی تمرین که کاربر در باشگاه اجرا می کند ممکن است در سطل مکرر باشد.
اگر یک برنامه در سطل مکرر قرار داشته باشد، سیستم محدودیتهای قویتری بر توانایی آن برای اجرای کارها و راهاندازی آلارمها اعمال میکند، و همچنین محدودیتی بر پیامهای FCM با اولویت بالا اعمال میکند. برای جزئیات، به محدودیتهای مدیریت نیرو مراجعه کنید.
- نادر
اگر یک برنامه اغلب استفاده نشود، در سطل کمیاب قرار دارد. به عنوان مثال، یک برنامه هتل که کاربر فقط در زمانی که در آن هتل اقامت دارد اجرا می کند ممکن است در سطل کمیاب باشد.
اگر برنامهای در سطل کمیاب باشد، سیستم محدودیتهای سختی بر توانایی آن برای اجرای کارها، راهاندازی آلارمها و دریافت پیامهای FCM با اولویت بالا اعمال میکند. این سیستم همچنین توانایی برنامه برای اتصال به اینترنت را محدود می کند. برای جزئیات، به محدودیتهای مدیریت نیرو مراجعه کنید.
- هرگز
برنامه هایی که نصب شده اند اما هرگز اجرا نمی شوند به سطل never اختصاص داده می شوند. این سیستم محدودیت های شدیدی را برای این برنامه ها اعمال می کند.
سیستم به صورت پویا هر برنامه را به یک سطل اولویت اختصاص می دهد و برنامه ها را در صورت نیاز مجدداً اختصاص می دهد. این سیستم ممکن است به یک برنامه از پیش بارگذاری شده متکی باشد که از یادگیری ماشین برای تعیین میزان احتمال استفاده از هر برنامه استفاده می کند و برنامه ها را به سطل های مناسب اختصاص می دهد. اگر برنامه سیستم در دستگاهی موجود نباشد، سیستم به طور پیشفرض برنامهها را بر اساس اخیراً استفاده شده مرتب میکند. برنامههای فعالتر به سطلهایی اختصاص داده میشوند که به برنامهها اولویت بیشتری میدهند و منابع سیستم بیشتری را در اختیار برنامه قرار میدهند. به طور خاص، سطل تعیین میکند که کارهای برنامه چند بار اجرا شود، هر چند وقت یکبار برنامه میتواند آلارمها را راهاندازی کند، و هر چند وقت یکبار برنامه میتواند پیامهای Firebase Cloud Messaging (FCM) با اولویت بالا را دریافت کند. این محدودیتها فقط زمانی اعمال میشوند که دستگاه از باتری استفاده میکند. هنگامی که دستگاه در حال شارژ شدن است، سیستم این محدودیت ها را بر روی برنامه ها اعمال نمی کند.
هر سازنده ای می تواند معیارهای خود را برای نحوه تخصیص برنامه های غیرفعال به سطل ها تعیین کند. شما نباید سعی کنید روی سطلی که برنامه شما به آن اختصاص داده شده است تأثیر بگذارید. در عوض، روی اطمینان از اینکه برنامه شما در هر سطلی که ممکن است در آن قرار داشته باشد، به خوبی رفتار می کند، تمرکز کنید. برنامه شما می تواند با فراخوانی روش جدید UsageStatsManager.getAppStandbyBucket()
متوجه شود که در حال حاضر در چه سطلی قرار دارد.
بهترین شیوه ها
اگر برنامه شما در حال حاضر بهترین روشها را برای Doze و آماده به کار برنامه دنبال میکند، مدیریت ویژگیهای جدید مدیریت انرژی نباید دشوار باشد. با این حال، برخی از رفتارهای برنامه که قبلاً به خوبی کار می کردند اکنون ممکن است باعث ایجاد مشکل شوند.
- سعی نکنید سیستم را برای قرار دادن برنامه خود در یک سطل یا آن دستکاری کنید. روشهای سطلسازی سیستم میتواند تغییر کند و هر سازنده دستگاه میتواند برنامه سطلسازی خود را با الگوریتم خاص خود بنویسد. درعوض، مطمئن شوید که برنامه شما بدون توجه به اینکه در کدام سطل قرار دارد، رفتار مناسبی دارد.
- اگر برنامهای فعالیت راهاندازی نداشته باشد، ممکن است هرگز به سطل فعال ارتقا پیدا نکند. ممکن است بخواهید برنامه خود را برای داشتن چنین فعالیتی دوباره طراحی کنید.
- اگر اعلانهای برنامه قابل اجرا نباشند، کاربران نمیتوانند با تعامل با اعلانها، تبلیغ برنامه را به سطل فعال فعال کنند. در این مورد، ممکن است بخواهید برخی از اعلانهای مناسب را دوباره طراحی کنید تا اجازه پاسخ از سوی کاربر را بدهند. برای برخی از دستورالعملها، الگوهای طراحی اعلانهای طراحی مواد را ببینید.
به طور مشابه، اگر برنامه پس از دریافت پیام FCM با اولویت بالا، اعلانی را نشان ندهد، به کاربر فرصتی برای تعامل با برنامه و در نتیجه تبلیغ آن به سطل فعال نمی دهد. در واقع، تنها کاربرد مورد نظر برای پیامهای FCM با اولویت بالا، ارسال یک اعلان به کاربر است، بنابراین این وضعیت هرگز نباید رخ دهد. اگر پیام FCM را بهطور نامناسب بهعنوان اولویت بالا علامتگذاری کنید، زمانی که تعامل کاربر را تحریک نمیکند، میتواند پیامدهای منفی دیگری ایجاد کند. به عنوان مثال، می تواند منجر به اتمام سهمیه برنامه شما شود و باعث شود که پیام های FCM واقعاً فوری به عنوان اولویت عادی در نظر گرفته شوند.
توجه: اگر کاربر مکرراً یک اعلان را رد کند، سیستم به کاربر این امکان را می دهد که آن اعلان را در آینده مسدود کند. فقط برای اینکه سعی کنید برنامه خود را در سطل فعال نگه دارید، کاربر را با اعلان ها اسپم نکنید!
اگر برنامهها در چندین بسته تقسیم شوند، آن بستهها ممکن است در سطلهای مختلف باشند و بنابراین سطوح دسترسی متفاوتی داشته باشند. باید مطمئن شوید که چنین برنامه هایی را با بسته های اختصاص داده شده به سطل های مختلف آزمایش کنید تا مطمئن شوید برنامه به درستی عمل می کند.
بهبود صرفه جویی در باتری
اندروید 9 تعدادی بهبود در حالت صرفه جویی در باتری ایجاد می کند. سازنده دستگاه محدودیت های دقیق اعمال شده را تعیین می کند. به عنوان مثال، در ساختهای AOSP، سیستم محدودیتهای زیر را اعمال میکند:
- این سیستم برنامهها را بهجای اینکه منتظر بماند تا برنامه بیحرکت باشد، با شدت بیشتری در حالت آماده به کار برنامه قرار میدهد.
- محدودیت های اجرای پس زمینه برای همه برنامه ها، صرف نظر از سطح API هدف آنها اعمال می شود.
- خدمات مکان ممکن است زمانی که صفحه خاموش است غیرفعال شود.
- برنامه های پس زمینه دسترسی به شبکه ندارند.
علاوه بر این، بهینهسازیهای قدرت خاص دستگاه دیگری نیز وجود دارد. برای جزئیات کامل، به صفحه ای که محدودیت های مدیریت انرژی را توضیح می دهد مراجعه کنید.
مثل همیشه، ایده خوبی است که برنامه خود را تا زمانی که بهینه ساز باتری فعال است، آزمایش کنید. میتوانید از طریق تنظیمات > صفحه نمایش «بهینهسازی باتری» دستگاه، «بهینهسازی باتری» را به صورت دستی روشن کنید.
تست و عیب یابی
ویژگیهای جدید مدیریت انرژی بر همه برنامههای در حال اجرا در دستگاههای Android 9 تأثیر میگذارد، چه برنامهها Android 9 را هدف قرار دهند یا نه. مهم است که مطمئن شوید برنامه شما در این دستگاهها به درستی عمل میکند.
حتماً موارد استفاده اصلی برنامه خود را تحت شرایط مختلف آزمایش کنید تا ببینید چگونه ویژگیهای مدیریت انرژی با یکدیگر تعامل دارند. میتوانید از دستورات Android Debug Bridge برای روشن و خاموش کردن برخی از ویژگیها استفاده کنید.
دستورات Android Debug Bridge
می توانید از دستورات پوسته Debug Bridge Android برای آزمایش چندین ویژگی مدیریت انرژی استفاده کنید.
برای اطلاعات در مورد استفاده از ADB برای قرار دادن دستگاه خود در Doze، به تست با Doze و App Standby مراجعه کنید.
سطل های آماده به کار برنامه
می توانید از ADB برای اختصاص دستی برنامه خود به یک App Standby Bucket استفاده کنید. برای تغییر سطل برنامه از دستور زیر استفاده کنید:
$ adb shell am set-standby-bucket packagename active|working_set|frequent|rare
همچنین می توانید از این دستور برای تنظیم چندین بسته به طور همزمان استفاده کنید:
$ adb shell am set-standby-bucket package1 bucket1 package2 bucket2...
برای بررسی اینکه یک برنامه در چه سطلی قرار دارد، اجرا کنید
$ adb shell am get-standby-bucket [packagename]
اگر پارامتر packagename ارسال نکنید، دستور سطلهای همه برنامهها را فهرست میکند. یک برنامه همچنین میتواند با فراخوانی روش جدید UsageStatsManager.getAppStandbyBucket()
در زمان اجرا، سطل خود را پیدا کند.
صرفه جویی در باتری
چندین دستور برای آزمایش نحوه عملکرد برنامه شما در شرایط کم مصرف وجود دارد.
برای شبیه سازی دستگاه در حال قطع شدن، از دستور استفاده کنید
$ adb shell dumpsys battery unplug
برای آزمایش نحوه عملکرد دستگاه در شرایط کم مصرف، از این دستور استفاده کنید:
$ adb shell settings put global low_power 1
هنگامی که آزمایش خود را به پایان رساندید، می توانید تنظیمات دستی دستگاه خود را با این دستور لغو کنید:
$ adb shell dumpsys battery reset