बैटरी लाइफ़ बढ़ाने के लिए, जगह की जानकारी के इस्तेमाल को ऑप्टिमाइज़ करना

जगह की जानकारी देने वाली सेवाओं का इस्तेमाल करते समय, डिवाइस की बैटरी लाइफ़ पर अपने ऐप्लिकेशन के असर को कम करने के लिए, ये कार्रवाइयां करें.

जगह की जानकारी के अपडेट हटाना

बैटरी के बेवजह खर्च होने की एक आम वजह यह है कि जब जगह की जानकारी के अपडेट की ज़रूरत नहीं होती, तब उन्हें बंद नहीं किया जाता.

ऐसा तब हो सकता है, जब किसी ऐक्टिविटी के onStart() या onResume() लाइफ़साइकल के तरीकों में, requestlocationUpdates() को कॉल किया गया हो. हालांकि, onPause() या onStop() लाइफ़साइकल के तरीकों में, removeLocationUpdates() को कॉल नहीं किया गया हो.

लाइफ़साइकल की जानकारी वाले कॉम्पोनेंट का इस्तेमाल करके, अपने ऐप्लिकेशन में मौजूद ऐक्टिविटी के लाइफ़साइकल को बेहतर तरीके से मैनेज किया जा सकता है. ज़्यादा जानकारी के लिए, लाइफ़साइकल की जानकारी वाले कॉम्पोनेंट की मदद से लाइफ़साइकल मैनेज करना लेख पढ़ें.

टाइम आउट सेट करना

बैटरी खत्म होने से बचाने के लिए, जगह की जानकारी अपडेट होने की अवधि को सीमित करें. टाइमआउट की वजह से, अपडेट हमेशा जारी नहीं रहते. साथ ही, इससे उन स्थितियों में ऐप्लिकेशन को सुरक्षित रखने में मदद मिलती है जहां अपडेट का अनुरोध किया जाता है, लेकिन उन्हें हटाया नहीं जाता. उदाहरण के लिए, कोड में मौजूद किसी गड़बड़ी की वजह से.

फ़्यूज़्ड लोकेशन प्रोवाइडर के अनुरोध के लिए, setDurationMillis() को कॉल करके टाइमआउट जोड़ें. यह एक ऐसा पैरामीटर लेता है जो यह दिखाता है कि इस तरीके को आखिरी बार कॉल किए जाने के बाद से कितने मिलीसेकंड बीत चुके हैं. इस तरीके का इस्तेमाल करके, समयसीमा खत्म होने के समय को अवधि के हिसाब से भी बताया जा सकता है.

जियोफ़ेंस की जगह की जानकारी के अनुरोध में टाइमआउट जोड़ने के लिए, setExpirationDuration() तरीके को कॉल करें.

एक साथ ग्रुप या बैच में भेजे गए अनुरोध

फ़ोरग्राउंड में इस्तेमाल न होने वाले सभी मामलों के लिए, एक साथ कई अनुरोधों का बैच बनाएं. जगह की जानकारी का हिसाब लगाने के लिए, setIntervalMillis() तरीके का इस्तेमाल करके, वह अंतराल तय करें जिस पर आपको जगह की जानकारी का हिसाब लगाना है. इसके बाद, setMaxUpdateDelayMillis() तरीके का इस्तेमाल करके, वह इंटरवल सेट करें जिस पर आपके ऐप्लिकेशन को जगह की जानकारी डिलीवर की जाती है. setMaxUpdateDelayMillis() तरीके को ऐसी वैल्यू पास करें जो setIntervalMillis() तरीके को पास की गई वैल्यू का मल्टीपल हो. उदाहरण के लिए, जगह की जानकारी के लिए यह अनुरोध देखें:

Kotlin

val request = LocationRequest.Builder(Priority.PRIORITY_HIGH_ACCURACY, 10 * 60 * 1000)
.setMaxUpdateDelayMillis(60 * 60 * 1000)
.build()

Java

LocationRequest request = new LocationRequest.Builder(Priority.PRIORITY_HIGH_ACCURACY, 10 * 60 * 1000)
    .setMaxUpdateDelayMillis(60 * 60 * 1000)
    .build();

इस मामले में, सिस्टम हर दस मिनट में जगह की जानकारी का हिसाब लगाता है. साथ ही, हर घंटे में जगह की जानकारी के करीब छह डेटा पॉइंट, बैच में डिलीवर करता है. इस मोड में, आपको हर दस मिनट में जगह की जानकारी के अपडेट मिलते रहते हैं. साथ ही, बैटरी की बचत होती है, क्योंकि आपका डिवाइस हर घंटे में एक बार ही चालू होता है.

जगह की जानकारी को अपने-आप अपडेट होने की सुविधा का इस्तेमाल करना

बैकग्राउंड में जगह की जानकारी का इस्तेमाल करने के उदाहरणों में, जगह की जानकारी के अपडेट को थ्रॉटल करना एक अच्छा आइडिया है. Android 8.0 (एपीआई लेवल 26) में, इस तरीके को लागू करने की सीमाएं तय की गई हैं. हालांकि, पुराने डिवाइसों पर काम करने वाले ऐप्लिकेशन को बैकग्राउंड में जगह की जानकारी का इस्तेमाल कम से कम करना चाहिए.

ऐसा हो सकता है कि आपका ऐप्लिकेशन बैकग्राउंड में चल रहा हो और कोई दूसरा ऐप्लिकेशन, फ़ोरग्राउंड में जगह की जानकारी को बार-बार अपडेट करने का अनुरोध कर रहा हो. जगह की जानकारी देने वाली सेवाओं की मदद से, ऐप्लिकेशन को ये अपडेट उपलब्ध कराए जाते हैं. जगह की जानकारी के इस अनुरोध पर ध्यान दें, जो जगह की जानकारी का डेटा इस्तेमाल करता है:

Kotlin

val request = LocationRequest.Builder(Priority.PRIORITY_HIGH_ACCURACY, 15 * 60 * 1000)
.setMinUpdateIntervalMillis(2 * 60 * 1000)
.build()

Java

LocationRequest request = new LocationRequest.Builder(Priority.PRIORITY_HIGH_ACCURACY, 15 * 60 * 1000)
    .setMinUpdateIntervalMillis(2 * 60 * 1000)
    .build();

पिछले उदाहरण में, ऐप्लिकेशन की जगह की जानकारी हर 15 मिनट में अपडेट होती है. अगर अन्य ऐप्लिकेशन, जगह की जानकारी का अनुरोध करते हैं, तो ऐप्लिकेशन को ज़्यादा से ज़्यादा दो मिनट के अंतराल पर डेटा मिलता है.

जगह की जानकारी को पैसिव तरीके से इस्तेमाल करने पर बैटरी की खपत नहीं होती. हालांकि, उन मामलों में ज़्यादा सावधानी बरतें जहां जगह की जानकारी मिलने से, सीपीयू या I/O के महंगे ऑपरेशन ट्रिगर होते हैं. बैटरी की लागत कम करने के लिए, setMinUpdateIntervalMillis() में बताया गया इंटरवल बहुत छोटा नहीं होना चाहिए.