این سند روالهای مطلوب را برای نحوه بهینهسازی مصرف برق در برنامه ناوبری تلفن همراهی که بااستفاده از «کیت توسعه نرمافزار ناوبری» میسازید شرح میدهد. همزمان، این سند موازنههایی را که باید هنگام بهکارگیری این شیوهها درنظر گرفته شود شرح میدهد. بهطور خاص، این سند موارد زیر را پوشش میدهد:
- منابع مصرف زیاد باتری، رتبهبندیشده از بیشترین به کمترین.
- راهبردهای بهینهسازی مصرف برق، بهترتیب اهمیت، با نرخ فریم شروع میشود.
- راهبردهای کاربر نهایی برای آموزش به کاربران برنامهتان درباره نحوه مدیریت استفاده از دستگاهشان درحین پیمایش.
چرا برنامه ناوبریتان را بهینهسازی کنید؟
بسته به شرایط، کاربران برنامه شما ممکن است راهنمای ناوبری را برای مدت طولانی اجرا کنند. برای مثال، رانندگان و پیکهای تحویل ممکن است ساعتهای طولانی کار کنند و مأموریتهایشان را در مناطق ناآشنا انجام دهند. در این موارد، آنها بهشدت به راهنمایی گامبهگام درونبرنامهای متکی هستند. این امر منجر به برخی مشکلات معمول میشود:
- خالی شدن شارژ باتری و دردسترس بودن شارژر. استفاده زیاد از پیمایش میتواند باعث شود شارژ باتری دستگاه سریعتر از حد انتظار خالی شود. درحالیکه بسیاری از کاربران میتوانند این مشکل را با شارژ کردن دستگاهشان در خودرو برطرف کنند، رانندگان وسایل نقلیه دوچرخ نمیتوانند.
- دستگاه بهدلیل گرما درحال کاهش سرعت است. حتی کاربرانی که بهطور مداوم دستگاهشان را شارژ میکنند ممکن است با مشکلاتی مواجه شوند. مصرف زیاد برق در مدتزمان طولانی میتواند باعث گرم شدن دستگاه شود و درنتیجه، به کاهش سرعت حرارتی و متعاقباً افت عملکرد منجر شود.
برنامههای ناوبری گامبهگام به ویژگیهای پرمصرفی مانند صفحهنمایش، GPS، و ارتباط رادیویی با دکلهای سلولی متکی هستند، بنابراین بهترین روش این است که مصرف برق برنامه تلفن همراه خود را بهینهسازی کنید. علاوهبراین، باید نیازهای مصرف برق مخاطبان هدف خود را درنظر بگیرید تا بتوانید توازن مناسبی بین عملکرد و بهینهسازی مصرف برق برقرار کنید.
چه چیزی بیشترین مصرف برق را دارد؟
این بخش فعالیتهای درونبرنامه مرتبط با مصرف زیاد باتری را به دو دسته تقسیم میکند:
- پرداز صفحه
- بهروزرسانیهای موقعیت م
پرداز صفحه
پرداز صفحه معمولاً بیشترین مصرف برق را در برنامههای ناوبری تلفن همراه ایجاد میکند. هر بار که دستگاه نقشه و دیگر عناصر میانای کاربر را روی صفحهنمایش ترسیم میکند، به پردازش واحد پردازش گرافیکی و واحد پردازش مرکزی متکی است. بهطور مشابه، وقتی کاربر آن صفحه را برای مدت طولانی روشن میگذارد، این کار نیز نیروی بیشتری مصرف میکند.
تاحدی میتوانید انتظار مصرف برق بالا را از رانندگان یا موتورسوارانی داشته باشید که برای پیمایش به نقشه قابلمشاهده متکی هستند، بهویژه اگر بهطور مداوم برای ساعتهای طولانی از برنامه استفاده کنند. در این سناریو، برنامه همچنین نرخ بالاتری از پردازش را روی صفحه انجام میدهد زیرا نقشه در زمان واقعی بهروز میشود. در برخی موارد، صفحهنمایش میتواند تقریباً بهطور مداوم دوباره ترسیم شود، بهویژه زمانی که کاربر بدون توقف از مکانی به مکان دیگر رانندگی میکند.
بهروزرسانیهای موقعیت م
علاوهبر رندر کردن صفحه، دو فعالیت پیمایش دیگر نیز شارژ دستگاه را مصرف میکنند:
- استفاده از GPS و برج سلولی رادیویی
- بهروزرسانی و همرسانی مکان، مثلاً برای ارائه زمان تخمینی رسیدن یا گزارش کردن موقعیت خودرو در ناوگان.
ارتباطات رادیویی سلولی و GPS هر دو به عملیات راهاندازی پرمصرف متکی هستند: GPS باید ماهوارهها را پیدا کند و رادیوهای سلولی باید با برجها مذاکره کنند و اتصال برقرار کنند. به این دلایل، آنها اساساً بهطور مداوم درطول پیمایش اجرا میشوند، هرچند رادیوهای سلولی برای ۲۰ تا ۳۰ ثانیه فعال میمانند تا هزینههای راهاندازی را به حداقل برسانند. سیستمعامل این تنظیمات را کنترل میکند و نمیتوانید بهراحتی آنها را در برنامهتان پیکربندی کنید.
برای بهروزرسانیهای مکان، مصرف برق براساس عوامل غیرقابلپیشبینی متفاوت است. برای مثال، فاصله بین دستگاه و ایستگاه پایه سلولی میزان مصرف برق را تعیین میکند، زیرا دستگاه از حداقل سیگنال لازم برای ادامه پیمایش استفاده میکند تا از تعویض دکلها جلوگیری کند. بنابراین، دستگاهی که در منطقهای با اتصال ضعیف درحال پیمایش است، نسبت به دستگاهی که نزدیک به ایستگاه پایه است، شارژ بیشتری مصرف خواهد کرد. علاوهبراین، برخیاز برنامهها ممکن است بهروزرسانیهای مکان را با سرویس مدیریت ناوگان مرکزی همرسانی کنند و بنابراین برای انجام این کار باید با سرور ارتباط برقرار کنند.
مصرف برق برنامهتان را بهینه کنید
چالش بهینهسازی مصرف برق در برنامههای ناوبری این است که این برنامهها بهشدت به منابع پرمصرف وابسته هستند، که گزینههای شما را برای کاهش تأثیر بدون ایجاد معاوضههایی مانند محدود کردن استفاده از صفحه محدود میکند. این بخش فهرستی از رویکردهایی را ارائه میدهد که میتوانید هنگام بهینهسازی برنامهتان اتخاذ کنید، بهترتیب از بیشترین تا کمترین تأثیر.
تغییر نرخ فریم
صفحهنمایش آنچه را نشان میدهد با فرکانسی بهروز میکند که به آن نرخ فریم میگویند، معمولاً با فریم در ثانیه (FPS) اندازهگیری میشود. چون پردازش صفحه از پردازش قابلتوجه واحد پردازش مرکزی و واحد پردازش گرافیکی استفاده میکند، میتوانید نرخ فریم را کاهش دهید تا در مصرف برق صرفهجویی شود.
وقتی نرخ فریم را کاهش میدهید، پرداز نقشه و اشارههای تعاملی (مثل حرکت افقی، بزرگنمایی، یا چرخش) ممکن است کمتر روان بهنظر برسد. برای ایجاد تعادل بین بازدهی مصرف انرژی و تجربه کاربری پاسخگو، میتوانید نرخ فریم پایه را پایین نگه دارید و آن را بهطور پویا درطول تعاملات فعال کاربر افزایش دهید.
در دستگاههای iOS، کیت توسعه نرمافزار Maps برای iOS ویژگی preferredFrameRate را درGMSMapView برای کنترل نرخ فریم نشان میدهد. جدول زیر مقادیر GMSFrameRate را که میتوانید تنظیم کنید نشان میدهد:
| مقدار سوئیفت | مقدار Objective-C | شرح |
|---|---|---|
.powerSave |
kGMSFrameRatePowerSave |
برای صرفهجویی در مصرف باتری، از حداقل نرخ فریم استفاده کنید. |
.conservative |
kGMSFrameRateConservative |
از نرخ فریم میانه استفاده کنید تا پردازش هموارتری ارائه شود و چرخههای پردازش حفظ شود. |
.maximum |
kGMSFrameRateMaximum |
از حداکثر نرخ فریم برای دستگاه استفاده کنید (۳۰ فریم در ثانیه برای دستگاههای ضعیف، ۶۰ فریم در ثانیه برای دستگاههای قوی). |
برای مرجع، GMSFrameRate را در اسناد کیت توسعه نرمافزار ناوبری برای iOS ببینید.
برای تنظیم مستقیم نرخ فریم ترجیحی، مقداری را به
mapView.preferredFrameRate اختصاص دهید:
Swift
// Reduce the frame rate to conserve battery:
mapView.preferredFrameRate = .powerSave
آبجکتیو-سی
// Reduce the frame rate to conserve battery:
mapView.preferredFrameRate = kGMSFrameRatePowerSave;
تنظیم پویای نرخ فریم درطول اشارهها
نرخ فریم پایینتر میتواند تعاملات کاربر (مانند حرکت عرضی، بزرگنمایی، و چرخش) را ناهموار کند. میتوانید با افزایش موقت نرخ فریم به حداکثر درطول اشارههای کاربر و سپس بازگشت به نرخ فریم صرفهجویی در مصرف انرژی پساز پایان اشاره، تعاملات را روان نگه دارید و درعینحال در مصرف انرژی صرفهجویی کنید.
برای انجام این کار، پروتکل GMSMapViewDelegate را اتخاذ کنید و روشهای زیر را اجرا کنید:
- در
mapView:willMove:، بررسی کنید که آیا حرکت دوربین با اشاره کاربر شروع شده است یا نه. اگرgesturetrueاست،preferredFrameRateرا روی حداکثر تنظیم کنید. - در
mapView:idleAtCameraPosition:، وقتی دوربین غیرفعال میشود،preferredFrameRateرا به حالت ذخیره انرژی بازیابی کنید.
نمونه کد زیر نحوه تنظیم پویای نرخ فریم را درطول اشارههای کاربر نشان میدهد:
Swift
class YourViewController: UIViewController {
@IBOutlet weak var mapView: GMSMapView!
override func viewDidLoad() {
super.viewDidLoad()
mapView.delegate = self
// Set a baseline low frame rate to conserve power:
mapView.preferredFrameRate = .powerSave
}
}
// MARK: - GMSMapViewDelegate
extension YourViewController: GMSMapViewDelegate {
func mapView(_ mapView: GMSMapView, willMove gesture: Bool) {
// Increase frame rate during user gestures for smooth interaction:
if gesture {
mapView.preferredFrameRate = .maximum
}
}
func mapView(_ mapView: GMSMapView, idleAt position: GMSCameraPosition) {
// Restore the power-saving frame rate when gestures finish:
mapView.preferredFrameRate = .powerSave
}
}
آبجکتیو-سی
@interface YourViewController : UIViewController <GMSMapViewDelegate>
@end
@implementation YourViewController {
GMSMapView *_mapView;
}
- (void)viewDidLoad {
[super viewDidLoad];
_mapView.delegate = self;
// Set a baseline low frame rate to conserve power:
_mapView.preferredFrameRate = kGMSFrameRatePowerSave;
}
#pragma mark - GMSMapViewDelegate
- (void)mapView:(GMSMapView *)mapView willMove:(BOOL)gesture {
// Increase frame rate during user gestures for smooth interaction:
if (gesture) {
mapView.preferredFrameRate = kGMSFrameRateMaximum;
}
}
- (void)mapView:(GMSMapView *)mapView
idleAtCameraPosition:(GMSCameraPosition *)position {
// Restore the power-saving frame rate when gestures finish:
mapView.preferredFrameRate = kGMSFrameRatePowerSave;
}
@end
ناوبری بدون نقشه
اگرچه نمیتوانید کنترل کنید که کاربر نهایی روشنایی صفحهنمایش دستگاه خود را چگونه تنظیم میکند یا چه مدت صفحهنمایش خود را روشن نگه میدارد، میتوانید گزینهای برای راهنمایی ناوبری بدون نقشه ارائه دهید. این کار به کاربر نهایی اجازه میدهد آن گزینه را برای صرفهجویی در مصرف برق انتخاب کند. برای مثال، اگر رانندگان بهطور منظم در یک محله کار کنند، ممکن است به راهنمایی مبتنی بر نقشه نیاز نداشته باشند. ناوبری بدون نقشه را میتوان با تنظیم مقصد و شروع راهنمایی در Navigation SDK فعال کرد، اما نقشه نمایش داده نمیشود.
یک خط کد برای پنهان کردن GMSMapView اضافه کنید:
mapView.isHidden = true
کیت توسعه نرمافزار پیمایش همچنان مکانهای منطبق با جاده، زمان تخمینی رسیدن، و مسافت باقیمانده سفر را بهروز میکند و برنامهتان همچنان میتواند در همه رویدادهای مطرحشده توسط کیت توسعه نرمافزار با پیشروی راننده مشترک شود. این کار برای همه موارد استفاده مناسب نیست و در مواردی که راننده باید نقشه را ببیند و راهنماییهای تصویری را دنبال کند، توصیه خوبی نیست. نماگرفتهای زیر مقایسه پهلوبهپهلو از جابهجایی بین نماهای نقشه را درطول ناوبری فعال نشان میدهد.
|
|
استفاده از سبک نقشه تیره
برای کاهش مقدار انرژی موردنیاز برای رندر کردن نقشه در صفحه، سبک نقشه را طوری تنظیم کنید که از زمینه تیره استفاده کند.
کیت توسعه نرمافزار ناوبری نقشههایش را بااستفاده از کیت توسعه نرمافزار Google Maps برای iOS ارائه میکند، که حاوی گزینههایی برای سبکبندی هر نمای نقشه غیرناوبری در برنامهتان است. نمای ناوبری همچنین از حالت تاریک اجباری پشتیبانی میکند. این کار ممکن است بهدلیل تفاوت در نوع صفحهنمایش، روی همه دستگاهها تأثیر یکسانی نداشته باشد، اما در برخی موارد میتواند باعث صرفهجویی در مصرف برق شود. مطالعهای جدید نشان داد که میزان صرفهجویی در مصرف باتری بااستفاده از حالت تیره در برخی صفحهنمایشها به میزان روشنایی صفحهنمایش در ابتدا بستگی دارد. برای مثال، حالت تیره در صفحهنمایشهایی که روی روشنایی کامل تنظیم شدهاند، بیشتر از صفحهنمایشهایی که روشناییشان ازقبل روی ۳۰ تا ۵۰ درصد حداکثر تنظیم شده است، شارژ باتری را ذخیره میکند. این نکته مهمی است که باید هنگام استفاده از حالت تاریک برای برنامههایتان درنظر بگیرید، زیرا صرفهجویی در مصرف انرژی به نحوه تنظیم روشنایی صفحهنمایش توسط کاربر نهایی بستگی دارد.
برای کسب اطلاعات بیشتر درباره اصلاح واسط کاربر «ناوبری»، اصلاح واسط کاربر ناوبری را ببینید.
سبکپردازی نقشه بااستفاده از فضای ابری به شناسه نقشهای نیاز دارد که نشاندهنده پیکربندی نقشه سمت سرور باشد که در پروژه «کنسول Google» شما ایجاد شده است. برای کسب اطلاعات بیشتر درباره ایجاد شناسه نقشه، به اسناد توسعهدهنده شناسه نقشه مراجعه کنید. برای جزئیات بیشتر درباره طراحی و استقرار سبک نقشه بااستفاده از فضای ابری، به اسناد توسعهدهنده درباره ایجاد و مدیریت سبکهای نقشه بااستفاده از فضای ابری مراجعه کنید.
تغییر دادن تناوب بهروزرسانی مکان GPS
هنگام درنظر گرفتن مصرف برق از بهروزرسانیهای مکان ارسالشده از دستگاه، بیشتر بر تعداد دفعات بهروزرسانی مکان تمرکز کنید تا مقدار دادههای ارسالشده در انتقال.
این چیزی نیست که بتوانید مستقیماً در Navigation SDK کنترل کنید. همین توصیه برای استفاده از منابع مکان غیرGPS (شبکه تلفن همراه و Wi-Fi) نیز صدق میکند.
آموزش دادن کاربران
کاربران برنامه شما ممکن است بخواهند بدانند چگونه مصرف برق خود را بهینه کنند. برای کمک به آنها در کاهش مصرف برق در برنامههایشان، به کاربران خود توصیه کنید موارد زیر را انجام دهند:
- قفل کردن تلفن
- برنامه ناوبری را در پسزمینه قرار دهید
- درصورت امکان، از ناوبری بدون نقشه استفاده کنید
- روشنایی صفحهنمایش را کاهش دهید، یا بااستفاده از حالت تیره برای صفحهنمایشهای OLED و AMOLED، یا با فعال کردن روشنایی تطبیقی
- دستگاه را خنک نگه دارید
- درصورت دردسترس بودن، به Wi-Fi داخل خودرو متصل شوید
اندازهگیری مصرف برق
میتوانید از ابزارهای حرفهای برای اندازهگیری مصرف برق استفاده کنید، اما اغلب تهیه آنها دشوار یا پرهزینه است. برنامهها و ابزارهای نمایهسازی IDE مانند Power Profiler در Android Studio و Battery Usage pane در XCode Organizer مصرف برق را اندازهگیری میکنند، اما حذف تأثیر فرایندهای پسزمینه یا تنظیم خط مبنای عملکرد برای اندازهگیری درمقابل آن میتواند دشوار باشد. در برخی موارد، محدودیتهای دستگاه ممکن است مانع از دسترسی به دادههای لازم شود.
میتوانید از سختافزار نظارت بر مصرف برق با هدف خاص استفاده کنید و پیکربندی اتصال باتری را تغییر دهید، و محصولات و خدمات تجاری برای کمک به شما در انجام این کار وجود دارد. توجه داشته باشید که اصلاح دستگاهها به این روش ممکن است ضمانتنامه دستگاه را باطل کند.