वेक लॉक का इस्तेमाल करने से, डिवाइस की परफ़ॉर्मेंस पर असर पड़ सकता है. अगर आपको वॉकी-अप लॉक का इस्तेमाल करना है, तो उसे सही तरीके से सेट अप करना ज़रूरी है. इस दस्तावेज़ में, वेक लॉक से जुड़ी आम समस्याओं से बचने के सबसे सही तरीके बताए गए हैं.
वेक लॉक का सही नाम रखना
हमारा सुझाव है कि आप अपने पैकेज, क्लास या तरीके का नाम, wakelock टैग में शामिल करें. इस तरह, अगर कोई गड़बड़ी होती है, तो सोर्स कोड में उस जगह का पता लगाना आसान हो जाता है जहां वेक लॉक बनाया गया था. यहां कुछ और सुझाव दिए गए हैं:
- नाम में व्यक्तिगत पहचान से जुड़ी कोई भी जानकारी (पीआईआई) शामिल न करें. जैसे, ईमेल पता. अगर डिवाइस को वेक लॉक टैग में निजी जानकारी का पता चलता है, तो वह आपके तय किए गए टैग के बजाय
_UNKNOWN
को लॉग करता है. - प्रोग्राम के हिसाब से क्लास या तरीके का नाम न पाएं. उदाहरण के लिए,
getName()
को कॉल करके. प्रोग्राम के ज़रिए नाम पाने की कोशिश करने पर, Proguard जैसे टूल की वजह से नाम को गच्चा दिया जा सकता है. इसके बजाय, हार्ड कोड की गई स्ट्रिंग का इस्तेमाल करें. - वेक लॉक टैग में कोई काउंटर या यूनीक आइडेंटिफ़ायर न जोड़ें. जिस कोड से वेक लॉक बनता है उसे हर बार चलने पर एक ही टैग का इस्तेमाल करना चाहिए. इस तरीके से, सिस्टम हर तरीके के वेक लॉक के इस्तेमाल को इकट्ठा कर पाता है.
पक्का करें कि आपका ऐप्लिकेशन फ़ोरग्राउंड में दिख रहा हो
वेक लॉक चालू होने पर, डिवाइस बैटरी का इस्तेमाल करता है. डिवाइस के उपयोगकर्ता को यह पता होना चाहिए कि ऐसा हो रहा है. इस वजह से, अगर स्क्रीन चालू रखने के लिए लॉक का इस्तेमाल किया जा रहा है, तो आपको उपयोगकर्ता को कोई सूचना दिखानी चाहिए. इसका मतलब है कि आपको फ़ोरग्राउंड सेवा में वेकलॉक को पाने और उसे बनाए रखने की ज़रूरत है. सूचना दिखाने के लिए, फ़ोरग्राउंड सेवाओं की ज़रूरत होती है.
अगर आपके ऐप्लिकेशन के लिए फ़ोरग्राउंड सेवा सही नहीं है, तो आपको वॉक लॉक का इस्तेमाल भी नहीं करना चाहिए. अगर आपको ऐप्लिकेशन के फ़ोरग्राउंड में न होने पर भी काम करने के अन्य तरीके जानने हैं, तो डिवाइस को चालू रखने के लिए सही एपीआई चुनें दस्तावेज़ देखें.
लॉजिक को आसान रखें
पक्का करें कि वेक लॉक हासिल करने और उन्हें रिलीज़ करने का लॉजिक जितना हो सके उतना आसान हो. जब आपका वेक लॉक लॉजिक, जटिल स्टेट मशीन, टाइम आउट, 'एग्ज़ीक्यूटर पूल' या कॉलबैक इवेंट से जुड़ा होता है, तो उस लॉजिक में मौजूद किसी भी छोटी गड़बड़ी की वजह से, वेक लॉक की अवधि उम्मीद से ज़्यादा हो सकती है. इन गड़बड़ियों का पता लगाना और उन्हें डीबग करना मुश्किल होता है.
देखें कि वेक लॉक हमेशा रिलीज़ हो
अगर आपने वेक लॉक का इस्तेमाल किया है, तो पक्का करें कि आपने जो भी वेक लॉक हासिल किया है उसे सही तरीके से रिलीज़ किया गया हो. यह सुनने में जितना आसान लगता है, हकीकत में उतना आसान नहीं होता. उदाहरण के लिए, यहां दिए गए कोड में कोई गड़बड़ी है:
Kotlin
@Throws(MyException::class)
fun doSomethingAndRelease() {
wakeLock.apply {
acquire()
doTheWork() // can potentially throw MyException
release() // does not run if an exception is thrown
}
}
Java
void doSomethingAndRelease() throws MyException {
wakeLock.acquire();
doTheWork(); // can potentially throw MyException
wakeLock.release(); // does not run if an exception is thrown
}
यहां समस्या यह है कि doTheWork()
तरीका, अपवाद MyException
दिखा सकता है. अगर ऐसा होता है, तो doSomethingAndRelease()
तरीका अपवाद को बाहर भेजता है और यह release()
कॉल तक कभी नहीं पहुंचता. इसका नतीजा यह होता है कि वेक लॉक हासिल हो जाता है, लेकिन उसे रिलीज़ नहीं किया जाता. यह बहुत खराब है.
ठीक किए गए कोड में, doSomethingAndRelease()
यह पक्का करता है कि अपवाद मिलने पर भी, स्क्रीन चालू रखने वाला लॉक हट जाए:
Kotlin
@Throws(MyException::class)
fun doSomethingAndRelease() {
wakeLock.apply {
try {
acquire()
doTheWork()
} finally {
release()
}
}
}
Java
void doSomethingAndRelease() throws MyException {
try {
wakeLock.acquire();
doTheWork();
} finally {
wakeLock.release();
}
}