برنامه نویس اندروید
راهکار گوگل برای افزایش طول عمر باتری در اندروید
واژه Doze Mode یک ویژگی در سیستم عامل اندروید است که از نسخه 6.0 معرفی شده است. هدف اصلی از معرفی این قابلیت، کاهش مصرف باتری و در نتیجه افزایش طول عمر آن است.
در گذشته، برنامه های در حال اجرا در پس زمینه می توانستند بدون محدودیت از منابعی مانند CPU، رم، اینترنت و سنسورهای مختلف استفاده کنند که این امر باعث تخلیه سریع باتری می شد. اما Doze Mode با شناسایی زمان هایی که دستگاه در حالت بیکار (idle) قرار دارد، محدودیت هایی را برای این برنامه ها در نظر می گیرد تا از مصرف منابع جلوگیری شود.
به طور خاص، وقتی دستگاه برای مدت طولانی بیکار است و صفحه نمایش آن خاموش می ماند، Doze Mode فعال می شود. در این حالت، سیستم عامل دسترسی برنامه ها به شبکه داده ای، سنسورهای حرکتی، سرویس های پس زمینه و غیره را محدود می کند تا باتری کندتر تخلیه شود. البته گوگل برای برنامه های ضروری مانند تماس ها و هشدارها، استثنائاتی را در نظر گرفته است.
در نسخه های جدیدتر اندروید از جمله 7.0 و 8.0 ، گوگل بهبودهای بیشتری را به Doze Mode اضافه کرده تا عملکرد آن بهینه تر شود. به طور کلی، Doze Mode در حالی که تجربه کاربری را حفظ می کند، مصرف باتری را به میزان قابل توجهی کاهش می دهد.
این مقاله قصد دارد با جزئیات بیشتر به بررسی Doze Mode، نحوه کارکرد آن، مزایا و معایب احتمالی و نیز چگونگی تنظیم یا غیرفعال کردن این ویژگی بپردازد.
نحوه عملکرد Doze Mode
برای فعال شدن Doze Mode، دو شرط اصلی لازم است:
1. صفحه نمایش دستگاه باید خاموش باشد.
2. دستگاه نباید در حال حرکت یا لرزش باشد.
اگر این دو شرط برای مدت زمان معینی برقرار باشد، Doze Mode فعال میگردد.
در این حالت، دسترسی برنامهها به اینترنت، سنسورهای حرکتی، واکنشهای زمان واقعی و سرویسهای پسزمینه به شدت محدود میشود.
مزایای Doze Mode
- افزایش چشمگیر عمر باتری به واسطه کاهش مصرف انرژی در زمان بیکاری دستگاه
- جلوگیری از تخلیه شارژ باتری توسط برنامههای پرمصرف در پسزمینه
- کاهش ترافیک داده در زمان عدم استفاده از دستگاه
معایب احتمالی Doze Mode
- امکان تاخیر در دریافت برخی نوتیفیکیشنها و بهروزرسانیها
- احتمال مشکلات سازگاری با برخی برنامههای قدیمی
- کاهش عملکرد دستگاه در زمان بیکاری به دلیل محدودیت دسترسی به منابع
تنظیم و غیرفعال کردن در بیشتر دستگاههای اندرویدی، Doze Mode به صورت پیشفرض فعال است. اما در تنظیمات > باتری معمولا گزینههایی برای تنظیم یا غیرفعال کردن آن وجود دارد. همچنین برخی سازندگان اندرویدی امکان دسترسی به تنظیمات پیشرفته Doze Mode را در بخش تنظیمات باتری فراهم کردهاند.
برای غیرفعال کردن کامل Doze Mode باید دستگاه را در حالت Developer Options قرار داده و گزینه "Disable Doze Mode" را انتخاب کنید.
فهرست سفید (Whitelist) برای برنامههایی که نیاز دارند در حالت Doze Mode نیز به صورت کامل قابل دسترسی باشند، میتوان آنها را به فهرست سفید Doze Mode اضافه کرد. این کار از طریق تنظیمات دستگاه یا با استفاده از کد در برنامه امکانپذیر است.
برنامههای موجود در فهرست سفید از محدودیتهای Doze Mode مستثنی خواهند بود.
این مقاله در ادامه به جزئیات بیشتری در خصوص Doze Mode و نحوه اضافه کردن یا حذف برنامهها از فهرست سفید آن خواهد پرداخت.
خلاصه و نتیجهگیری در مورد Doze Mode
به طور خلاصه، Doze Mode یک ویژگی بسیار مفید در سیستمعامل اندروید است که هدف اصلی آن افزایش طول عمر باتری دستگاههای هوشمند است. این قابلیت با شناسایی زمانهای بیکاری دستگاه و اِعمال محدودیتهایی بر برنامههای در حال اجرا در پسزمینه، از مصرف بیهوده منابع و در نتیجه تخلیه سریع باتری جلوگیری میکند.
در مجموع، Doze Mode یک گام مثبت در راستای بهینهسازی مصرف انرژی در دستگاههای اندرویدی محسوب میشود که تجربه کاربری بهتری را برای افراد به ارمغان میآورد.
در ادامه میتوانیم به جزئیات فنیتر و تخصصیتر مانند REQUEST_IGNORE_BATTERY_OPTIMIZATIONS و Wake Locks در ارتباط با Doze Mode بپردازیم.
درخواست REQUEST_IGNORE_BATTERY_OPTIMIZATIONS
این یک Intent (درخواست) در اندروید است که به برنامهنویسان امکان میدهد برنامه خود را برای قرار گرفتن در فهرست سفید Doze Mode، نامزد کنند. برای استفاده از آن، باید در کد برنامه خود یک Intent با عمل "android.settings.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS" را ایجاد کنید.
سپس کاربر باید از میان لیست برنامهها نرمافزار شما را انتخاب کند تا در فهرست سفید Doze Mode قرار بگیرد. وقتی یک برنامه در این فهرست قرار گیرد، دیگر تحت محدودیتهای Doze Mode برای دسترسی به منابع سیستمی نخواهد بود.
بررسی Wake Lock ها
در اندروید Wake Lock یک مکانیزم در می باشد که به برنامهها اجازه میدهد دستگاه را از رفتن به حالت خواب (Sleep) بازدارند. با فراخوانی Wake Lock، برنامه میتواند سیستم را مجبور کند پردازنده، صفحه نمایش و دیگر قسمتهای اصلی دستگاه را روشن نگه دارد.
اما در حالت Doze Mode، سیستم عامل محدودیت شدیدی را برای Wake Lock های برنامهها اِعمال میکند. به این معنی که زمانی Doze Mode فعال است، Wake Lock های برنامهها دیگر نمیتوانند به طور موثر از خواب رفتن دستگاه جلوگیری کنند.
این محدودیت برای جلوگیری از تخلیه باتری توسط برنامههای پرمصرف در زمان بیکاری دستگاه، درنظر گرفته شده است. در غیر این صورت، برنامهها میتوانستند با نگه داشتن Wake Lock، اجرای Doze Mode را مختل کنند.
البته برای برنامههایی که در فهرست سفید Doze Mode قرار میگیرند، محدودیتی روی Wake Lock ها اعمال نمیشود. بنابراین اگر برنامه شما نیاز به حفظ Wake Lock در زمان Doze Mode دارد، باید از REQUEST_IGNORE_BATTERY_OPTIMIZATIONS برای افزودن آن به فهرست سفید استفاده کنید.
در ادامه این مقاله، نمونه کدهای مربوط به این موارد را نیز ارائه خواهیم کرد تا درک عملی از آنها فراهم شود.
نمونه کدها
برای درک بهتر نحوه استفاده از REQUEST_IGNORE_BATTERY_OPTIMIZATIONS و Wake Locks در ارتباط با Doze Mode، به نمونه کدهای زیر توجه کنید:
درخواست قرارگیری در فهرست سفید Doze Mode:
val isPowerSaveMode = powerManager.isPowerSaveMode
if (isPowerSaveMode) {
val intent = Intent(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS
intent.data = Uri.parse("package:$packageName")
startActivityForResult(intent, REQUEST_IGNORE_BATTERY_CODE)
}
در این کد، ابتدا بررسی میشود که آیا حالت صرفهجویی در باتری (Doze Mode) فعال است یا خیر.
اگر فعال باشد، یک Intent برای REQUEST_IGNORE_BATTERY_OPTIMIZATIONS ایجاد میشود و با استفاده از startActivityForResult فراخوانی میگردد تا کاربر بتواند برنامه را به فهرست سفید اضافه کند.
درخواست Wake Lock:
val wakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "MyApp::MyWakelockTag")
wakeLock.acquire()
// Do the work you want to keep the CPU awake for
wakeLock.release()
در این مثال، ابتدا یک شیء Wake Lock با استفاده از newWakeLock ایجاد میشود. سپس با فراخوانی متد acquire، Wake Lock را فعال میکنیم تا سیستم از خواب رفتن بازداشته شود. پس از انجام کارهای مورد نظر، با فراخوانی release، Wake Lock را آزاد میکنیم.
توجه داشته باشید که در حالت Doze Mode، Wake Lock های برنامهای که در فهرست سفید قرار ندارد، به دلیل محدودیتهای اعمال شده، کارایی چندانی نخواهد داشت.
اگر به این مطالب علاقه دارید پیشنها میکنم از مطالب زیر رو هم بخونید
بهینه سازی عملکرد و مصرف باتری در برنامه های اندروید
هدفم از نوشتن این مقاله درک عمیق تری از محدودیت هایی هست که اندروید سمت باتری داره و شما با دونستن اونا میتونید با دید باز تری توسعه برنامه هاتون رو انجام بدین
ممنون از زمانی که گذاشتین :))
خدانگهدارتون
مطلبی دیگر از این انتشارات
اشتباهات رایج برنامه نویسی و پیشنهاداتی برای حل آنها
مطلبی دیگر از این انتشارات
آشنایی با زبان های برنامه نویسی و حوزه های آن
مطلبی دیگر از این انتشارات
منجلابی که مدرسه از برنامه نویسی برایم ساخت!