برای بهبود عمر باتری دستگاه، Android میتواند با نظارت بر استفاده و بیداری دستگاه، بر وضعیت دستگاه تأثیر بگذارد. این پلتفرم میتواند وارد حالت خواب شود تا فعالیتها را در زمانی که دستگاه استفاده نمیشود متوقف کند.
درباره دوز
Doze با به تعویق انداختن CPU پسزمینه برنامه و فعالیت شبکه زمانی که دستگاه برای مدت طولانی استفاده نمیشود، عمر باتری را افزایش میدهد.
دستگاههای غیرفعال در Doze به صورت دورهای وارد یک پنجره تعمیر و نگهداری میشوند که در طی آن برنامهها میتوانند کارهای معلق (همگامسازی، کارها و غیره) را تکمیل کنند. سپس Doze خواب را برای مدت طولانیتری از سر میگیرد و به دنبال آن یک پنجره تعمیر و نگهداری دیگر ایجاد میشود. پلت فرم دنباله خواب/نگهداری Doze را ادامه می دهد و هر بار مدت زمان بیکاری را افزایش می دهد تا زمانی که به حداکثر چند ساعت زمان خواب برسد. در هر زمان، دستگاهی در Doze از حرکت آگاه است و در صورت تشخیص حرکت فوراً Doze را ترک میکند.
Android 7.0 و بالاتر Doze را گسترش میدهد تا هر بار که کاربر صفحه دستگاه را خاموش میکند، حتی زمانی که کاربر همچنان به حرکت خود ادامه میدهد، مجموعهای از بهینهسازیهای سبکتر را راهاندازی میکند و عمر باتری طولانیتری را ممکن میسازد.
خدمات سیستم حیاتی معمولاً توسط سازندگان دستگاه تنظیم می شود تا از Doze معاف شوند. کاربران همچنین می توانند با استفاده از منوی تنظیمات، برنامه های خاصی را از Doze معاف کنند. با این حال، معافیت برنامهها ممکن است باعث تخلیه باتری دستگاه شود. به طور پیش فرض، Doze در AOSP غیرفعال است. برای جزئیات در مورد فعال کردن Doze، به یکپارچه سازی Doze مراجعه کنید.
نیازهای دوز
پشتیبانی Doze مستلزم آن است که دستگاه یک سرویس پیام رسانی ابری مانند Firebase Cloud Messaging (FCM) داشته باشد. رویدادهای راهانداز خارجی، مانند پیامهای ابری، میتوانند به طور موقت برنامهها را برای انجام کار بیدار کنند در حالی که دستگاه در حالت Doze باقی میماند.
پشتیبانی Full Doze همچنین به یک آشکارساز حرکت قابل توجه (SMD) روی دستگاه نیاز دارد. با این حال، حالت سبک وزن Doze در اندروید 7.0 و بالاتر نیازی به SMD ندارد. اگر Doze در دستگاهی فعال باشد که:
- دارای SMD است، بهینه سازی های Full Doze رخ می دهد (شامل بهینه سازی های سبک وزن).
- SMD ندارد، فقط بهینه سازی های سبک Doze رخ می دهد.
چرخه زندگی Doze
Doze زمانی شروع میشود که پلتفرم تشخیص دهد که دستگاه بیحرکت است و زمانی پایان مییابد که یک یا چند فعالیت معیار خروج رخ دهد.
پلتفرم تشخیص میدهد که دستگاهی بیحرکت است زمانی که:
- دستگاه ثابت است (با استفاده از SMD).
- صفحه دستگاه برای مدتی خاموش است.
وقتی دستگاهی که با باتری به شارژر برق متصل است، حالت Doze درگیر نمیشود.
در طول دوز
پلتفرم سعی می کند سیستم را در حالت خواب نگه دارد، به طور دوره ای عملیات عادی را در طول یک پنجره تعمیر و نگهداری از سر می گیرد و سپس دستگاه را برای دوره های طولانی تری به حالت خواب برمی گرداند. در طول خواب، محدودیت های زیر فعال هستند:
- برنامهها اجازه دسترسی به شبکه را ندارند.
- wakelocks برنامه نادیده گرفته شد.
- هشدارها به تعویق افتاده است. آلارمهای ساعت زنگ دار و آلارمهایی را که با استفاده از
setAndAllowWhileIdle()
تنظیم شده است را شامل نمیشود (محدود به 1 در هر 15 دقیقه در هر برنامه در حالی که در Doze هستید). این معافیت برای برنامههایی (مانند تقویم) در نظر گرفته شده است که باید اعلانهای یادآور رویداد را نشان دهند. - اسکن Wi-Fi انجام نمی شود.
-
SyncAdapter
همگامسازی میشود و کارهایJobScheduler
تا پنجره نگهداری بعدی به تعویق میافتد. - برنامههایی که پیامهای SMS و MMS دریافت میکنند در لیست سفید موقت قرار میگیرند تا بتوانند پردازش خود را تکمیل کنند.
خارج شوید
پلتفرم وقتی دستگاه را تشخیص دهد از Doze خارج می شود:
- تعامل کاربر با دستگاه
- حرکت دستگاه
- صفحه دستگاه روشن می شود
- زنگ هشدار قریب الوقوع
اعلانها باعث خروج دستگاه از Doze نمیشوند.
Android 7.0 و بالاتر با فعال کردن حالت خواب سبک در حین خاموش شدن صفحه، قبل از اینکه دستگاه بیکار باشد، Doze را گسترش می دهد.
شکل 1. حالت های Doze برای دستگاه های غیر ثابت و ثابت.
اقدام | دوز | دوز سبک |
---|---|---|
ماشه | صفحه نمایش خاموش، روی باتری، ثابت | صفحه نمایش خاموش، با باتری (قطع شده) |
زمان بندی | افزایش متوالی دوره ها با نگهداری | دوره های N دقیقه ای مکرر با پنجره های تعمیر و نگهداری |
محدودیت ها | بدون دسترسی به شبکه، قفل بیدار شدن، یا اسکن GPS/Wi-Fi. هشدارها و مشاغل/همگامسازیها به تعویق افتاد | عدم دسترسی به شبکه؛ کارها/همگامسازیها به جز در طول پنجرههای نگهداری به تعویق افتاد |
رفتار | فقط پیامهای اعلان فشار با اولویت بالا دریافت میشود | همه پیامهای بیدرنگ (پیامهای فوری، تماسها و غیره) دریافت شدهاند. پیام اعلان فشار با اولویت بالا دسترسی موقت به شبکه را فعال می کند |
خارج شوید | حرکت، صفحه روشن یا زنگ ساعت زنگ دار | صفحه نمایش روشن است |
تعامل با برنامه Standby
- زمان صرف شده در Doze در حالت آماده به کار برنامه حساب نمی شود.
- در حالی که دستگاه در Doze است، برنامههای غیرفعال مجاز هستند حداقل یک بار در روز عملیات عادی را انجام دهند.
Doze را ادغام کنید
وقتی Doze فعال است، دستگاههایی که SENSOR_TYPE_SIGNIFICANT_MOTION
را پشتیبانی میکنند، بهینهسازی کامل Doze را انجام میدهند (از جمله بهینهسازیهای سبک). دستگاه های بدون SMD فقط بهینه سازی های سبک Doze را انجام می دهند. Android بهطور خودکار بهینهسازیهای Doze مناسب را انتخاب میکند و نیازی به پیکربندی فروشنده نیست.
برای فعال کردن Doze برای دستگاه:
- تأیید کنید که دستگاه یک سرویس پیامرسانی ابری نصب کرده است.
- در فایل پیکربندی overlay دستگاه
overlay/frameworks/base/core/res/res/values/config.xml
،config_enableAutoPowerModes
را رویtrue
تنظیم کنید: در AOSP، این پارامتر به طور پیش فرض روی<bool name="config_enableAutoPowerModes">true</bool>
false
(Doze غیرفعال) تنظیم شده است. - تأیید کنید که برنامهها و سرویسهای از پیش بارگذاری شده:
- از دستورالعمل های بهینه سازی صرفه جویی در مصرف انرژی استفاده کنید. برای جزئیات، به تست و بهینه سازی برنامه ها مراجعه کنید.
یا
- از Doze و App Standby معاف هستند. برای جزئیات، به معافیت برنامهها مراجعه کنید.
- از دستورالعمل های بهینه سازی صرفه جویی در مصرف انرژی استفاده کنید. برای جزئیات، به تست و بهینه سازی برنامه ها مراجعه کنید.
- تأیید کنید که خدمات لازم از Doze معاف هستند.
نکات
- در صورت امکان، از FCM برای پیام رسانی پایین دستی استفاده کنید.
- اگر کاربران شما باید فوراً اعلانی را ببینند، از یک پیام با اولویت بالا FCM استفاده کنید.
- اطلاعات کافی را در بار اولیه پیام ارائه دهید (برای جلوگیری از دسترسی غیر ضروری بعدی به شبکه).
- آلارم های حیاتی را با
setAndAllowWhileIdle()
وsetExactAndAllowWhileIdle()
تنظیم کنید.
برنامه ها را تست و بهینه کنید
همه برنامه ها (مخصوصا برنامه های از پیش بارگذاری شده) را در حالت Doze تست کنید. برای جزئیات، به تست با Doze و App Standby مراجعه کنید.