درحالی که تلفنهای هوشمند شانس بسیار بزرگی برای توسعهدهندگان اپلیکیشن هستند، منابع وابسته به موبایل نیز چالشهای خاصی برای آنان ایجاد میکنند. یکی از این چالشها مصرف باتری است. اگر اپلیکیشنی که شما ساختهاید تشنه مصرف باتری باشد، مشتریان نظرات منفی در مورد آن خواهند نوشت. در برخی موارد، آنها حتی اپلیکیشن شما را از روی تلفنشان حذف خواهند کرد. از این رو، توسعهدهندگان اپلیکیشنهای موبایل علاوه بر توجه به بهینهسازی عملکرد و میزان مصرف حافظه، به صورت فزاینده به دنبال پاسخگویی به چالش بهینهسازی مصرف باتری نیز هستند.
با اینکه فنون زیادی برای کاهش میزان انرژی مورد نیاز اپلیکیشنها وجود دارد، که برخی از آنها نیازمند بهینهسازی و تجزیه و تحلیل ریشهای هستند، در این مقاله به راهنماییها و نکات سادهای که عملکرد اپلیکیشن را به شدت بهبود میبخشند میپردازیم.
صفحه نمایش
صفحهنمایش یکی از بزرگترین مصرفکنندگان باتری است. در مقالهای در رابطه با مدیریت باتری برای بازیهای موبایل محاسبه شده است که در تلفن هوشمند اندرویدی HTC Magic، در حالی که تمام اجزا با نهایت میزان مصرف ممکنشان در حال فعالیت باشند صفحهنمایش السیدی ۴۵ تا ۵۰ درصد از کل انرژی سیستم را مصرف میکند. در اینجا باید دو نکته را در ذهن داشته باشید:
- سیستمهای عامل تلفنهای هوشمند به گونهای طراحی شدهاند که اگر کاربر تلفن خود را شارژ نکند نور صفحه نمایش را به صورت خودکار کم کنند. توسعهدهندگان اپلیکیشن میتوانند این قابلیت را (در صورتی که واقعا مورد نیاز باشد) لغو کنند.
- رویکرد دوم کمی پیچیدهتر است و به تلاش بیشتری نیاز دارد. در موارد عادی میزان روشنایی تصاویر و صفحه نمایش روی مقادیر پیشفرض تنظیم شدهاند. با این حال ما میتوانیم با روشنتر کردن تصاویر یا محتوا و کمنور کردن صفحه نمایش و یا برعکس برای رسیدن به روشنایی موردنظرمان در این مقادیر نفوذ کنیم. این تدبیر را میتوان روی اپلیکیشنها یا بازیهایی که کاربران به عنوان بازیها و اپلیکیشنهای پرمصرف میشناسند اعمال کرد.
رابطهای شبکه
بعد از صفحه نمایش اجزای ارتباطات بیسیم (مثل GSM، 3G، WLAN و غیره) دومین مصرفکننده بزرگ باتری موبایل هستند. به گفته مقالهای در NUS در صورت روشن بودن صفحه نمایش ارتباطات بیسیم ۴۰ درصد از باتری را در گوشیهای موبایل مصرف میکنند و اگر صفحه نمایش خاموش باشد نیز این اجزا ۷۰ درصد باتری را مورد مصرف قرار میدهند. راههای معدودی برای محدود کردن مصرف ارتباطات شبکهای به شرح زیرند:
- اگر یک سرور غیرمستقیم دارید، سیستم را به گونهای طراحی کنید که دادهها را پشت سر هم انتقال دهند نه به صورت دورهای. انتقال دورهای (مثل نظرسنجی، عملکرد کاربر و …) حتی اگر ترافیک کمی ایجاد کنند منابع بسیار ناکارآمدی دارند. اتصالات TCP همزمان خیلی زیادی را باز نکنید، در عوض از اتصالات دائم TCP یا HTTP استفاده کنید.
- کَش کردن دادهها (چه داخلی و چه روی سرور) هم میتواند به مصرف بیشتر باتری منجر شود.
- دریافت اطلاعات مربوط به موقعیت جغرافیایی کاربر میتواند خیلی زود باتری دستگاه را خالی کند. پس در صورتیکه واقعا لازم نیست، از جمعآوری اطلاعات محل کاربر بپرهیزید. برای نمونه اگر اپلیکیشن شما به اطلاعات مسیرها نیازمند است به جای یک محل از مجموعه کوچکتری از مکانها استفاده کنید؛ چیزی که با وجود ارائه اطلاعات حرکت، اندازهاش کوچک است. در صورت امکان از سرویس تغییر مکان استفاده کنید، زیرا این کار بهترین راه برای صرفهجویی در مصرف باتری برای دریافت اطلاعات مکانی مورد نیاز اپلیکیشن در درازمدت است. تکنیک دیگری برای ذخیره باتری خاموش کردن GPS در زمانهایی است که دستگاه در حال حرکت نیست. میتوانید از شتابسنج دستگاه استفاده کنید تا بدانید چه زمانی حرکت آغاز میشود و آنگاه GPS دوباره راهاندازی شود.
- تبلیغات موبایلی نمونههای فوقالعادهای از مصرف باتری در ارتباطات بیسیم هستند. اخیرا مطالعهای انجام شده است که نشان میدهد این تبلیغات ۶۵ درصد از کل مصرف باتری مربوط به ارتباطات در اپلیکیشنها و ۲۳ درصد از انرژی کل مصرفی اپلیکیشن را به خود اختصاص میدهند.
پردازنده
وقتی یک اپلیکیشن برای عملکرد بهتر بهینهسازی شده باشد، در اغلب مواقع برای مصرف باتری نیز بهینهسازی شده است. مصرف CPU را میتوان با حذف پردازشهای غیرضروری و یا بهینهسازی پردازشهای ضروری کاهش داد:
- در مورد بازیها، تعداد نمایش فریمها در ثانیه را کم کنید. در اکثر موارد چشم شما متوجه تفاوت نمیشود، مگر اینکه سرعت فریمها کم شود. این سرعت بین ۲۴-۳۰ فریم بر ثانیه است و به همین دلیل است که در اکثر بازیها مورد استفاده قرار میگیرد.
- مهم است که توسعهدهندگان اپلیکیشن پیکربندی دستگاه هدفشان را بدانند. برای مثال موقع طراحی اپلیکیشنهای صوتی-تصویری فرمت و نوع کدی را انتخاب کنید که به سختافزار دستگاه یاری برساند. توسعهدهندگانی که به جای کدهای مبتنی بر نرمافزار از راهکارهای کدنویسی سرعتبخش به سخت افزار دستگاهها بهره میبرند میتوانند متوجه صرفهجویی قابل توجه در بار پردازنده شوند.
- از قابلیت Cloud Offloading برای تقسیم عملکرد محاسباتی اپلیکیشن استفاده کنید. از این طریق بخشی از نیاز محاسباتی برنامه خود را به سرورهای پردازش ابری ارسال میکنید.
- درست مثل رابطهای شبکه، عدم ایجاد نظرسنجی، دسترسی مداوم به دیسک و انجام عملیات محاسباتی در مقادیر کوچک میتواند مناسب باشد.
- استفاده از جداول مرجع را برای موارد رایج طی محاسبات پیچیده در نظر داشته باشید.
از سختافزار غیرضروری بپرهیزید
تلفنهای هوشمند اجزایی بسیار زیادی همچون دوربین، سرعتسنج، حسگرهای متنوع و … دارند. هنگام دسترسی به سختافزار یک دستگاه، باید اطمینان حاصل کنید که نرمافزار شما پارامترهای پشتیبانی دارد که اجزای مستقل را پس از مدتی غیرفعال بودن خاموش میکند. خاموش کردن بلوتوث، جیپیاس و سایر قابلیتها زمانی که مورد مصرف قرار نمیگیرند یکی از روشهای ساده ذخیره باتری در اپلیکیشن شماست.
چالشها و ابزار
لایههای چندگانه نرمافزارهای واسطی که بین برنامههای کاربردی و سختافزار قرار میگیرند باعث میشوند توسعهدهندگان، کار تولید نرمافزارهای اپلیکیشنهای موبایل را راحتتر انجام دهند، اما در عین حال کنترل آنان را روی بهینهسازی استفاده از منابع تا حد زیادی کم میکنند.
متاسفانه، ابزار بسیار کمی برای بهبود میزان مصرف باتری اپلیکیشنها در اختیار توسهدهندگان قرار دارد. در حقیقت، خیلی از توسعهدهندگان از میزان بالای مصرف باتری توسط اپلیکیشنهایی که مینویسند بیاطلاع هستند.
مدیریت انرژی صحیح مستلزم درک مناسب از محل و نحوه مصرف انرژی است. ابزار و منابع کمی وجود دارند که توسعهدهندگان میتوانند با استفاده از آنها میزان مصرف باتری اپلیکیشن خود را بررسی کنند. روی گوشیهای آیفون، میتوانید مسیر Settings > Developer > Energy Diagnostics را طی کرده و ثبت گزارشات را فعال کنید.پس از آن میتوانید از این قالب برای تحلیل دادههای این گزارشات در ابزارها بهره ببرید. این گزارشات در طول زمان در قالب رویدادها و نمودارهای گوناگون در ارتباط با پردازنده و شبکه، مانند تصویر زیر نمایش داده میشوند:
همانطور که در تصویر زیر میبینید، در تلفنها اندروید میتوانید به همین شکل از PowerTutor استفاده کنید. با اینحال توجه به این نکته که نرمافزارها خودشان هم محدودیتهایی دارند ضروری است. این نرمافزارها خودشان هم مقداری از باتری را مصرف میکنند.
بهترین راه برای اندازهگیری مصرف باتری بررسی خود باتری است؛ استفاده از یک مولتیمتر دیجیتال در محیطی کنترل شده.
منابع بیشتر
راهکارهای پیشرفته اپلیکیشنِ اپل تعدادی نکات عالی به توسعهدهندگان ارائه میکند تا بتوانند مصرف باتری اپلیکیشنهای خود را کاهش دهند. این مقاله اینتل نیز منبع فوقالعاده دیگری است که به بهینهسازیهای ویژهای که توسعهدهندگان میتوانند در سورسکد اپلیکیشنهای خود و به منظور کاهش مصرف باتری پیاده کنند، بیان میکند.
GSMA نیز راهنمای دیگری برای کمک به توسعه دهندگان جهت ارتقای عملکرد اپلیکیشنها و همچنین کاهش مصرف باتریشان ارائه نموده است. در آخرVerizon’s App Ranking نیز بنچمارکی برای بررسی نحوه عملکرد اپلیکیشنهای توسعهدهندگان ارائه کرده است.
دلیل اهمیت موضوع برای ما چیست؟
Sanjay Jha از شرکت موتورولا گفته است که اپلیکیشنهایی که کدنویسی ضعیف دارند مقدار زیادی از باتری موبایلتان را مصرف میکنند. کم بودن عمر باتری یکی از دلایل خسته شدن کاربران بوده و در بسیاری از بررسیهای دستگاهها، شکایت کاربران از کم بودن مدت زمان استفاده از باتری پس از یکبار شارژ است. به علاوه، بسیاری از توسعهدهندگان اپلیکیشن تجربه کافی درباره سیستمهای قابل حمل کممصرف ندارند و بنابراین اغلب اپلیکیشنهای موبایل تا کنون بدون توجه به میزان مصرف انرژی نوشته شدهاند.
رویکردی که در این مقاله ذکر شده است، هرچند ساده، اما میتواند میزان مصرف باتری اپلیکیشنهایتان را بهطور اساسی کاهش دهد. به خاطر داشته باشید که هر کدام از این تکنیکها را میتوانید با دیگری عوض کنید. بر اساس نیازهای ویژه خود، بهترین روش را برای خودتان انتخاب کنید.