इस दस्तावेज़ में, Navigation SDK का इस्तेमाल करके बनाए गए मोबाइल नेविगेशन ऐप्लिकेशन में, बैटरी की खपत को ऑप्टिमाइज़ करने के सबसे सही तरीके बताए गए हैं. साथ ही, इसमें इन तरीकों को लागू करते समय ध्यान में रखने वाली बातों के बारे में भी बताया गया है. खास तौर पर, इस दस्तावेज़ में इन विषयों के बारे में बताया गया है:
- ज़्यादा बैटरी खर्च करने वाले सोर्स. इन्हें सबसे ज़्यादा से सबसे कम बैटरी खर्च करने के क्रम में लगाया जाता है.
- बैटरी की खपत को ऑप्टिमाइज़ करने के लिए, रणनीतियां. इन्हें अहमियत के हिसाब से क्रम में लगाया गया है. इनकी शुरुआत फ़्रेम रेट से होती है.
- असली उपयोगकर्ताओं के लिए रणनीतियां, ताकि वे नेविगेट करते समय अपने डिवाइस के इस्तेमाल को मैनेज करने का तरीका सीख सकें.
नेविगेशन ऐप्लिकेशन को ऑप्टिमाइज़ क्यों करना चाहिए?
आपके ऐप्लिकेशन के उपयोगकर्ता, अपनी स्थिति के हिसाब से लंबे समय तक नेविगेशन गाइडेंस का इस्तेमाल कर सकते हैं. उदाहरण के लिए, ड्राइवर और डिलीवरी कूरियर लंबे समय तक काम कर सकते हैं. साथ ही, अनजान इलाकों में असाइनमेंट पूरे कर सकते हैं. ऐसे मामलों में, वे ऐप्लिकेशन में मिलने वाले मोड़-दर-मोड़ दिशा-निर्देशों पर काफ़ी भरोसा करते हैं. इस वजह से, कुछ सामान्य समस्याएं होती हैं:
- बैटरी खर्च और चार्जर की उपलब्धता. नेविगेशन का ज़्यादा इस्तेमाल करने से, डिवाइस की बैटरी उम्मीद से ज़्यादा तेज़ी से खत्म हो सकती है. कई उपयोगकर्ता, गाड़ी में अपने डिवाइस को चार्ज करके इस समस्या को हल कर सकते हैं. हालांकि, दोपहिया वाहन चलाने वाले लोग ऐसा नहीं कर सकते.
- गर्म होने की वजह से डिवाइस की परफ़ॉर्मेंस कम हो रही है. डिवाइस को लगातार चार्ज करने वाले उपयोगकर्ताओं को भी समस्याएं आ सकती हैं. लंबे समय तक ज़्यादा पावर खर्च होने से, डिवाइस गर्म हो सकता है. इससे थर्मल थ्रॉटलिंग की समस्या हो सकती है और डिवाइस की परफ़ॉर्मेंस पर असर पड़ सकता है.
रास्ते के दिशा-निर्देश देने वाले ऐप्लिकेशन, ज़्यादा बैटरी खर्च करने वाली सुविधाओं पर निर्भर करते हैं. जैसे, स्क्रीन, जीपीएस, और सेल टावर के साथ रेडियो कम्यूनिकेशन. इसलिए, अपने मोबाइल ऐप्लिकेशन की बैटरी खर्च को ऑप्टिमाइज़ करना सबसे सही तरीका है. इसके अलावा, आपको अपनी टारगेट ऑडियंस की बैटरी खर्च की ज़रूरतों को ध्यान में रखना चाहिए, ताकि परफ़ॉर्मेंस और बैटरी खर्च को ऑप्टिमाइज़ करने के बीच सही संतुलन बनाया जा सके.
सबसे ज़्यादा बिजली की खपत किसमें होती है?
इस सेक्शन में, ज़्यादा बैटरी खर्च करने वाली इन-ऐप्लिकेशन गतिविधियों को दो कैटगरी में बांटा गया है:
- स्क्रीन रेंडरिंग
- स्थान अपडेट
स्क्रीन रेंडरिंग
आम तौर पर, मोबाइल नेविगेशन ऐप्लिकेशन में स्क्रीन रेंडरिंग की वजह से सबसे ज़्यादा बैटरी खर्च होती है. जब भी डिवाइस, स्क्रीन पर मैप और अन्य यूज़र इंटरफ़ेस (यूआई) एलिमेंट दिखाता है, तो वह जीपीयू और सीपीयू प्रोसेसिंग पर निर्भर करता है. इसी तरह, जब उपयोगकर्ता उस स्क्रीन को लंबे समय तक चालू रखता है, तो इससे भी ज़्यादा बैटरी खर्च होती है.
कुछ हद तक, उन ड्राइवर या राइडर के डिवाइसों में ज़्यादा बैटरी खर्च हो सकती है जो नेविगेट करने के लिए, मैप का इस्तेमाल करते हैं. खास तौर पर, तब जब वे ऐप्लिकेशन को लगातार कई घंटों तक इस्तेमाल करते हैं. इस स्थिति में, ऐप्लिकेशन स्क्रीन पर ज़्यादा तेज़ी से रेंडर करता है, क्योंकि मैप रीयल टाइम में अपडेट होता है. कुछ मामलों में, स्क्रीन लगातार री-ड्रॉ हो सकती है. खास तौर पर, तब जब उपयोगकर्ता बिना रुके एक जगह से दूसरी जगह जा रहा हो.
स्थान अपडेट
स्क्रीन रेंडरिंग के अलावा, नेविगेशन से जुड़ी दो अन्य गतिविधियां भी डिवाइस की बैटरी खर्च करती हैं:
- रेडियो सेल टावर और जीपीएस का इस्तेमाल
- जगह की जानकारी को अपडेट और शेयर करना. जैसे, ईटीए की जानकारी देना या वाहनों के बेड़े में किसी वाहन की पोज़िशन की जानकारी देना.
जीपीएस और सेल रेडियो, दोनों को शुरू होने के लिए ज़्यादा बैटरी की ज़रूरत होती है: जीपीएस को सैटलाइट ढूंढने होते हैं और सेल रेडियो को टावर से कनेक्ट करके कनेक्शन बनाना होता है. इन वजहों से, नेविगेशन के दौरान ये ऐप्लिकेशन लगातार चलते रहते हैं. हालांकि, सेल रेडियो 20 से 30 सेकंड तक चालू रहते हैं, ताकि स्टार्ट अप की लागत को कम किया जा सके. ऑपरेटिंग सिस्टम इन सेटिंग को कंट्रोल करता है. इन्हें अपने ऐप्लिकेशन में आसानी से कॉन्फ़िगर नहीं किया जा सकता.
डिवाइस की जगह की जानकारी के अपडेट के लिए, बैटरी के इस्तेमाल में कई वजहों से बदलाव हो सकता है. उदाहरण के लिए, डिवाइस और मोबाइल नेटवर्क के बेस स्टेशन के बीच की दूरी से, बैटरी के इस्तेमाल का पता चलता है. ऐसा इसलिए, क्योंकि डिवाइस टावर स्विच करने से बचने के लिए, नेविगेशन जारी रखने के लिए ज़रूरी कम से कम सिग्नल का इस्तेमाल करेगा. इसलिए, खराब कनेक्टिविटी वाले इलाके में नेविगेट करने वाला डिवाइस, बेस स्टेशन के नज़दीक मौजूद डिवाइस की तुलना में ज़्यादा बैटरी खर्च करेगा. इसके अलावा, कुछ ऐप्लिकेशन, फ़्लीट मैनेजमेंट की मुख्य सेवा के साथ जगह की जानकारी के अपडेट शेयर कर सकते हैं. इसलिए, उन्हें ऐसा करने के लिए सर्वर से कम्यूनिकेट करना होगा.
अपने ऐप्लिकेशन की बैटरी खर्च को ऑप्टिमाइज़ करना
नेविगेशन ऐप्लिकेशन में बैटरी के इस्तेमाल को ऑप्टिमाइज़ करना एक चुनौती है. इसकी वजह यह है कि ये ऐप्लिकेशन, बैटरी की ज़्यादा खपत करने वाले संसाधनों पर काफ़ी निर्भर करते हैं. इस वजह से, बैटरी की खपत को कम करने के लिए आपके पास सीमित विकल्प होते हैं. साथ ही, आपको स्क्रीन के इस्तेमाल को सीमित करने जैसे समझौते करने पड़ते हैं. इस सेक्शन में, ऐप्लिकेशन को ऑप्टिमाइज़ करने के लिए अपनाए जा सकने वाले तरीकों की सूची दी गई है. इस सूची में, सबसे ज़्यादा असरदार तरीके से लेकर सबसे कम असरदार तरीके तक के क्रम में तरीके दिए गए हैं.
फ़्रेम रेट बदलना
स्क्रीन पर दिखने वाला कॉन्टेंट, एक तय फ़्रीक्वेंसी पर अपडेट होता है. इसे फ़्रेम रेट कहा जाता है. आम तौर पर, इसे फ़्रेम प्रति सेकंड (एफ़पीएस) में मेज़र किया जाता है. स्क्रीन रेंडरिंग के लिए, सीपीयू और जीपीयू की प्रोसेसिंग का काफ़ी ज़्यादा इस्तेमाल होता है. इसलिए, बैटरी बचाने के लिए फ़्रेम रेट को कम किया जा सकता है.
फ़्रेम रेट कम करने पर, मैप रेंडरिंग और इंटरैक्टिव जेस्चर (जैसे, पैन करना, ज़ूम करना या घुमाना) कम स्मूद दिख सकते हैं. बैटरी की खपत कम करने के साथ-साथ, उपयोगकर्ता को बेहतर अनुभव देने के लिए, बेसलाइन फ़्रेम रेट को कम रखा जा सकता है. साथ ही, उपयोगकर्ता के इंटरैक्शन के दौरान, इसे डाइनैमिक तौर पर बढ़ाया जा सकता है.
iOS डिवाइसों पर, iOS के लिए Maps SDK, फ़्रेम रेट को कंट्रोल करने के लिए,GMSMapView पर preferredFrameRate प्रॉपर्टी को एक्सपोज़ करता है. नीचे दी गई टेबल में, GMSFrameRate की वे वैल्यू दिखाई गई हैं जिनमें बदलाव किया जा सकता है:
| स्विफ़्ट वैल्यू | Objective-C वैल्यू | ब्यौरा |
|---|---|---|
.powerSave |
kGMSFrameRatePowerSave |
बैटरी बचाने के लिए, कम से कम फ़्रेम रेट का इस्तेमाल करें. |
.conservative |
kGMSFrameRateConservative |
मीडियन फ़्रेम रेट का इस्तेमाल करें, ताकि रेंडरिंग आसानी से हो सके और प्रोसेसिंग साइकल को बचाया जा सके. |
.maximum |
kGMSFrameRateMaximum |
किसी डिवाइस के लिए ज़्यादा से ज़्यादा फ़्रेम रेट का इस्तेमाल करें. जैसे, कम सुविधाओं वाले डिवाइसों के लिए 30 FPS और ज़्यादा सुविधाओं वाले डिवाइसों के लिए 60 FPS. |
रेफ़रंस के लिए, iOS के लिए Navigation SDK के दस्तावेज़ में GMSFrameRate देखें.
पसंदीदा फ़्रेम रेट को सीधे सेट करने के लिए, mapView.preferredFrameRate को कोई वैल्यू असाइन करें:
Swift
// Reduce the frame rate to conserve battery:
mapView.preferredFrameRate = .powerSave
Objective-C
// Reduce the frame rate to conserve battery:
mapView.preferredFrameRate = kGMSFrameRatePowerSave;
हाथ के जेस्चर के दौरान, फ़्रेम रेट को डाइनैमिक तौर पर अडजस्ट करना
कम फ़्रेम रेट की वजह से, उपयोगकर्ता के इंटरैक्शन (जैसे, पैन करना, ज़ूम करना, और घुमाना) में रुकावट आ सकती है. उपयोगकर्ता के जेस्चर के दौरान, फ़्रेम रेट को कुछ समय के लिए ज़्यादा से ज़्यादा बढ़ाकर, इंटरैक्शन को आसान बनाया जा सकता है. साथ ही, बैटरी की खपत को कम किया जा सकता है. इसके बाद, जेस्चर खत्म होने पर, बैटरी की खपत कम करने वाले फ़्रेम रेट पर वापस लौटा जा सकता है.
इसके लिए, GMSMapViewDelegate प्रोटोकॉल अपनाएं और ये तरीके लागू करें:
mapView:willMove:में, देखें कि कैमरे को मूव करने की प्रोसेस, उपयोगकर्ता के जेस्चर से शुरू की गई थी या नहीं. अगरgesture,trueहै, तो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
}
}
Objective-C
@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
Navigation SDK, सड़क पर स्नैप की गई जगहों, ईटीए, और यात्रा की बची हुई दूरी को अपडेट करता रहेगा. साथ ही, ड्राइवर के आगे बढ़ने पर, आपका ऐप्लिकेशन अब भी एसडीके से जनरेट होने वाले सभी इवेंट की सदस्यता ले सकता है. यह हर मामले में सही नहीं है. साथ ही, उन मामलों में यह सही सलाह नहीं है जहां ड्राइवर को मैप देखना हो और विज़ुअल गाइडेंस का पालन करना हो. यहां दिए गए स्क्रीनशॉट में, नेविगेशन के दौरान मैप व्यू को टॉगल करने की सुविधा की तुलना अगल-बगल में की गई है.
|
|
गहरे रंग वाली मैप स्टाइल का इस्तेमाल करना
मैप को गहरे रंग वाली थीम में स्टाइल करें, ताकि स्क्रीन पर मैप को रेंडर करने के लिए कम ऊर्जा की ज़रूरत पड़े.
Navigation SDK, iOS के लिए Google Maps SDK का इस्तेमाल करके मैप रेंडर करता है. इसमें आपके ऐप्लिकेशन में, नेविगेशन के अलावा अन्य मैप व्यू को स्टाइल करने के विकल्प शामिल होते हैं. नेविगेशन व्यू में, गहरे रंग वाले मोड को ज़बरदस्ती लागू करने की सुविधा भी काम करती है. स्क्रीन टाइप में अंतर होने की वजह से, हो सकता है कि इसका असर हर डिवाइस पर एक जैसा न हो. हालांकि, कुछ मामलों में इससे बैटरी की बचत हो सकती है. हाल ही में की गई एक स्टडी से पता चला है कि कुछ स्क्रीन पर गहरे रंग वाले मोड से कितनी बैटरी बचेगी, यह इस बात पर निर्भर करता है कि स्क्रीन की चमक कितनी है. उदाहरण के लिए, गहरे रंग वाला मोड, पूरी रोशनी वाली स्क्रीन पर ज़्यादा बैटरी बचाता है. वहीं, जिन स्क्रीन की रोशनी पहले से ही 30 से 50% पर सेट होती है उन पर यह मोड कम बैटरी बचाता है. अपने ऐप्लिकेशन के लिए गहरे रंग वाले मोड का इस्तेमाल करते समय, इस बात का ध्यान रखना ज़रूरी है. ऐसा इसलिए, क्योंकि बैटरी की बचत इस बात पर निर्भर करेगी कि असली उपयोगकर्ता ने अपनी स्क्रीन की रोशनी को किस तरह सेट किया है.
नेविगेशन यूज़र इंटरफ़ेस (यूआई) में बदलाव करने के बारे में ज़्यादा जानने के लिए, नेविगेशन यूज़र इंटरफ़ेस (यूआई) में बदलाव करना लेख पढ़ें.
क्लाउड पर मैप की स्टाइलिंग की सुविधा के लिए, एक मैप आईडी की ज़रूरत होती है. यह आईडी, सर्वर साइड मैप कॉन्फ़िगरेशन को दिखाता है. इसे आपके Google Console प्रोजेक्ट में बनाया जाता है. मैप आईडी बनाने के बारे में ज़्यादा जानकारी के लिए, मैप आईडी डेवलपर दस्तावेज़ देखें. क्लाउड पर आधारित मैप स्टाइल को डिज़ाइन और डिप्लॉय करने के बारे में ज़्यादा जानने के लिए, क्लाउड पर आधारित मैप स्टाइल बनाने और मैनेज करने के बारे में डेवलपर दस्तावेज़ देखें.
जीपीएस की मदद से डिवाइस की जगह की जानकारी के अपडेट पाने की फ़्रीक्वेंसी बदलना
डिवाइस से भेजे गए जगह की जानकारी के अपडेट से होने वाली बैटरी की खपत का आकलन करते समय, ट्रांसमिशन में भेजे गए डेटा की मात्रा के बजाय, जगह की जानकारी के अपडेट की फ़्रीक्वेंसी पर ज़्यादा ध्यान दें.
Navigation SDK में, इसे सीधे तौर पर कंट्रोल नहीं किया जा सकता. यही सलाह, जीपीएस के अलावा जगह की जानकारी के अन्य सोर्स (सेल और वाई-फ़ाई) का इस्तेमाल करने पर भी लागू होती है.
अपने उपयोगकर्ताओं को, Google Workspace से जुड़ी जानकारी दें
आपके ऐप्लिकेशन के उपयोगकर्ता यह जानना चाहते होंगे कि बैटरी की खपत को कैसे कम किया जाए. अपने उपयोगकर्ताओं को यह सलाह दें कि वे अपने ऐप्लिकेशन में बैटरी की खपत कम करने के लिए, ये काम करें:
- फ़ोन को लॉक करना
- नेविगेशन ऐप्लिकेशन को बैकग्राउंड में चलाना
- अगर हो सके, तो मैप के बिना नेविगेशन का इस्तेमाल करें
- स्क्रीन की चमक कम करें. इसके लिए, OLED और AMOLED स्क्रीन के लिए गहरे रंग वाले मोड का इस्तेमाल करें या आस-पास की रोशनी के हिसाब से स्क्रीन की चमक अडजस्ट करने की सुविधा चालू करें
- डिवाइस को ठंडा रखें
- अगर उपलब्ध हो, तो वाहन में मौजूद वाई-फ़ाई से कनेक्ट करें
बिजली की खपत का आकलन करना
बिजली की खपत को मापने के लिए, प्रोफ़ेशनल-ग्रेड टूल का इस्तेमाल किया जा सकता है. हालांकि, इन्हें पाना अक्सर मुश्किल या महंगा होता है. ऐप्लिकेशन और आईडीई प्रोफ़ाइलिंग टूल, जैसे कि Android Studio में पावर प्रोफ़ाइलर और XCode Organizer में बैटरी खर्च करने वाला पैनल, बैटरी खर्च करने की दर को मापते हैं. हालांकि, बैकग्राउंड में चल रही प्रोसेस के असर को हटाना या परफ़ॉर्मेंस की बेसलाइन सेट करना मुश्किल हो सकता है. कुछ मामलों में, डिवाइस से जुड़ी पाबंदियों की वजह से, ज़रूरी डेटा को ऐक्सेस नहीं किया जा सकता.
खास मकसद के लिए, पावर मॉनिटरिंग हार्डवेयर का इस्तेमाल किया जा सकता है. साथ ही, बैटरी कनेक्शन कॉन्फ़िगरेशन में बदलाव किया जा सकता है. ऐसा करने में आपकी मदद करने के लिए, व्यावसायिक प्रॉडक्ट और सेवाएं मौजूद हैं. ध्यान दें कि इस तरह से डिवाइसों में बदलाव करने पर, डिवाइस की वारंटी खत्म हो सकती है.